指標就是位址,指標變數存放位址指標的型別決定了指標向前或者向後走一步的大小
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[3][2]a+1
,a[0]+1
,&a+1
的區別
# 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以二進位制補碼形式寫入記憶體 賦值 我們將這種通過變數名引用變數,由系統自動完成變數名和其儲存位址之間的轉換的方式,稱為變數的 直接引用 記憶體是線性,因為不同型別的變數占用不同大小的...