我對指標的理解

2021-08-17 08:24:08 字數 3012 閱讀 8497

指標就是位址,指標變數存放位址

指標的型別決定了指標向前或者向後走一步的大小

int a = 10;

int *pi = &a;

char * pc = &a;

pi + 1;//位址加4(int)

pc + 1;//位址加1(char)

二級指標

int a = 1;

int* p = &a;

int** pp = &p;

這裡的二級指標為什麼要用 int** pp = &p?

int a =1;

int* p= &a;

int* pp =&p;

比如像這種為什麼不可以,在我的理解中,指標變數就是用來存放位址的,那定義乙個指標變數int* pp來存放p的位址&p一樣合乎情理。這樣寫在語法上並沒有錯誤,但是在使用上就會存在問題,當我想要用*pp來訪問a的內容-時問題就來了。

int b = 10;

int* p = &b;

int* pp = &p;

printf("%d\n", **pp);

這裡會有乙個報錯error:"*"的運算元必須是指標,因為這裡定義二級指標變數時用是 int * p;所以當*p解引用之後就是乙個位址,再次解引用就*位址,也就是對位址這個常量解引用。所以二級指標必須是 int** p

在同一塊記憶體空間,指標+-指標的結果是指標之間元素的個數

int arr[10] = ;

int* p1 = &arr[9];

int* p2 = &arr[0];

printf("p1= %p p2= %p %d\n",p1,p2, p1 - p2);

//p1= 006ffd28 p2= 006ffd04 9

int arr[10] = ;

short* p1 = &arr[9];

short* p2 = &arr[0];

printf("p1= %p p2= %p %d\n",p1,p2, p1 - p2);

//p1= 005dfd40 p2= 005dfd1c 18

a+1,a[0]+1,&a+1的區別

定義乙個二維陣列a[3][2]

# include int main()

;printf("%d %d %d \n", *(a + 1), *(a[0] + 1), *(&a + 1));//這裡用%d只是為了看*(a[0]+1)的值

printf("%p %p %p %p \n", a, (a + 1), (a[0] + 1), (&a + 1));

return 0;

}

a+1:元素加一,a[0]+1:首元素的首位址加一,&a+1:整個陣列加一,跳過整個陣列

* 指標陣列

* 陣列指標

* 函式指標

* 函式指標陣列

* 指向函式指標陣列的指標

區別這幾個量首先看最後兩個字,不管名字多麼複雜,最後兩個字是什麼它就是什麼,函式指標陣列陣列就是陣列,指向函式指標陣列的指標它就是指標

指標陣列

是陣列,是乙個存放指標的陣列

如:

char* arr1[10];

int* arr2[4];

char* *arr3[5];

int main ()

;int i = 0;

for (i = 0; i < 2; i++)

}//han jian

//請按任意鍵繼續. . .

陣列指標

是指標,是乙個指向陣列的指標

int (*p)[10];
int main()

//jian

//請按任意鍵繼續. . .

在區分到底是指標陣列還是陣列指標時,看優先順序,p先和誰結合就是什麼,由於[ ]的優先順序比的優先順序高,int *p[10]中p先和[ ]結合,所以p是陣列,如果加上括號,int (*p)[10]中p先和結合,那麼它p就是指標。

函式指標

是指標,是乙個指向函式的指標。

void (*pf)();
# include void add(int a,int b)

int main()

//hello jan

//請按任意鍵繼續. . .

函式指標陣列

把函式位址存到陣列中,這個陣列就叫函式指標陣列

# include int sad(int z)

int main()

//請按任意鍵繼續. . .

函式指標陣列的指標

指標指向乙個陣列,陣列的元素是函式的指標

# include int sad(int z)

int main()

//請按任意鍵繼續. . .

知識點理解 我對指標的理解

include 筆記 我對指標的理解 intmain a str 錯誤,a 不是指標,b str printf b d n b 6 printf b 1 d n b 1 7 printf b 1 d n b 1 2 printf b d n b 6printf b d n b 位址值 printf ...

對指標的理解

指針對一部分初學者來說一直是乙個無法逾越的障礙,沒有指標的c語言就好像沒有左腿的短跑運動員。今天我來試試換一種方法來理解指標,希望能幫還在為指標掙扎的朋友們理清思路,高手略過即可。我們先認為記憶體是一家客棧 看起來這和老掉牙的大樓的比喻沒什麼區別,但是請你耐心看下去 同大部分的客棧一樣,這家客棧有天...

對指標的理解

在c語言中可以認為一切皆位址。int a 10 1 根據函式型別申請一塊記憶體,並將記憶體的名字命名為a 2 將10以二進位制補碼形式寫入記憶體 賦值 我們將這種通過變數名引用變數,由系統自動完成變數名和其儲存位址之間的轉換的方式,稱為變數的 直接引用 記憶體是線性,因為不同型別的變數占用不同大小的...