例子:
#include
int main()
; // 以下3行效果相同
char *p = a;
// char *p = a + 0;
// char *p = &a[0];
char **pp = &p;
printf("a: %p, *a: %p, &a: %p, sizeof(a): %d\n", a, *a, &a, sizeof(a));
printf("a+0: %p, *(a+0): %p, sizeof(a+0): %d\n", a+0, *(a+0), sizeof(a+0));
printf("a[0]: %p, &a[0]: %p, sizeof(a[0]): %d\n", a[0], &a[0], sizeof(a[0]));
printf("\np: %p, *p: %p\n", p, *p);
printf("&p: %p, &*p: %p\n", &p, &*p);
printf("\npp: %p, *pp: %p, **pp: %p\n", pp, *pp, **pp);
printf("&pp: %p, &*pp: %p, &**pp: %p\n", &pp, &*pp, &**pp);
// char (*ap)[5] = a; 非法語句
// 陣列指標只能指向陣列,a表示陣列首元素的位址而不是陣列的位址,儘管二者具有相同的值
char (*ap)[5] = &a;
printf("\nap: %p, *ap: %p\n", ap, *ap);
printf("&ap: %p, &*ap: %p\n", &ap, &*ap);
return
0;}
結果(具體數值可能因執行環境不同而不同):
a: 0061ff2b, *a: 00000061, &a: 0061ff2b, sizeof(a): 5
a+0: 0061ff2b, *(a+0): 00000061, sizeof(a+0): 4
a[0]: 00000061, &a[0]: 0061ff2b, sizeof(a[0]): 1
p: 0061ff2b, *p: 00000061
&p: 0061ff24, &*p: 0061ff2b
pp: 0061ff24, *pp: 0061ff2b, **pp: 00000061
&pp: 0061ff20, &*pp: 0061ff24, &**pp: 0061ff2b
ap: 0061ff2b, *ap: 0061ff2b
&ap: 0061ff1c, &*ap: 0061ff2b
c語言中,陣列名(假設為a)在某些情況下可以當作指標使用。不包括的情況:分析:
指標p
指標的指標pp
陣列指標ap
結語:
個人觀點:&*連續出現的時候可以相互抵消。
不完全型別
c 允許在乙個 檔案中存放多個類,但這樣往往不便於類的管理,所以一向是提倡乙個檔案中只存放乙個類。不過呢,隨著類規模的不斷膨脹,乙個檔案中存放乙個類也有些顯得臃腫,或者是在某個角度上不便於 的組織。因此,c 2.0中引入了不完全型別的概念,即啟用了新的修飾符partial。借助該修飾符,我們可以在多...
不完全型別
不完全型別指 函式之外 型別的大小不能被確定的型別 總結一下,c的型別分為 結構體的宣告就是乙個不完全型別的典型例子。struct woman tag struct man tag struct woman tag 這樣是沒問題的。如果將man tag結構中的struct woman tag wif...
不完全型別
有時候我們在一些編譯器寫 的時候會碰見不完全型別這個編譯錯誤,那麼什麼是不完全型別,為啥會出現呢 不完全型別指 函式之外 型別的大小不能被確定的型別 只能以有限方式使用。不能定義該型別的物件。不完全型別只能用於定義指向該型別的指標及引用 1 或者用於宣告使用該型別作為形參型別或者返回值型別。c的型別...