回覆列表
  • 1 # 使用者9855328204708

    這個問題問錯了,你把它們當成表示式來問了。

    如果是表示式,那麼方括號裡應該有個數字,或變數,否則你沒東西算。

    那麼就應該是聲明瞭,你缺少了基型別。

    一看就知道你是初學者,把指標聲明裡的星號,和普通算式裡的間接訪問運算搞混了。

    假設你的基型別是整數,用int,那麼int *p;這句話裡int的意思,就是你指標裡存的那個地址所對應的那個空間,是用來存整數的,不能存小數或字母等。

    這個表示式是這麼看的:int * p;

    不要這麼看:int *p;

    int叫做基型別,int *叫做指向int型資料的指標型別——p裡存的是個指標,也就是地址。

    那麼int **,就是以int *為基型別的指標型別。它是指向指標的指標——它作為一個地址,所連線的儲存空間裡,存的是指向int資料的地址。

    所以int ** p〔〕;就是告訴計算機:給我一連串的空間,每個空間都是裝地址的,而且這些地址是指向地址的,別給我搞成指向其他型別的了……

    那麼int * (*p)〔〕;想懂這句宣告,你要先明白一個概念:陣列的名字,是一個指標。也就是說,陣列的名字,他天然就裝著這個陣列的地址(也就是它第一個元素的地址)。

    比如int a〔〕;int * p;這兩句話寫出來了——那麼,我可以直接用p=a;把a的值給p。

    所以int * (*p)〔〕;這句話裡,(*p)相當於一個數組名,也就是地址,而這裡的*p,不是取p指向的值!而是在說:p是個指標!!!這個指標指向的指標,是這個陣列的第一個元素的地址(也就是這個陣列的指標)。

    ——再連上前面的int *——是說:有一連串的空間,每個空間裡都裝的都是地址,這些地址指向的是int型資料。而p,是指標,它指向另一個指標,這個指標沒有名字,但是這個沒名字的指標,是指向這個陣列的——也就是與這個數組裡的第一個元素的地址相等。

    我知道你不懂,那就再舉個簡單的例子。

    int a〔〕;int (*p)〔〕;這兩句話出來了,我能不能用p=a;來給p賦a值?顯然不能,因為a是個地址,p是個指向地址的地址,所以應該是p=&a;來把a的地址賦給p。

    或者直接寫成int (*p)〔〕=&a;——這句話很有迷惑性啊!!一不留神你就把等號左邊當成個算式開始取值了——千萬時刻注意!當一個數據型別和星號共同出現時,它們的目的只有一個:告訴計算機這是指標。至於是指向啥的指標,你自己仔細。

    我知道說了這麼多,可能你一個字都沒看懂。

    但沒關係,這些都是純玩兒概念的,沒什麼實用價值,屬於“貴族的娛樂”~

  • 中秋節和大豐收的關聯?
  • 咋樣才能更好的相處一個不喜歡自己,但自己非常喜歡的人?