C指標不完全理解

2021-08-20 06:19:22 字數 1632 閱讀 1911

例子:

#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的型別...