- 指針是什麼?
內存區的每一個字節有一個編號,這就是“地址”,它相當於房間號。由於通過地址能找到所需的變量單元,我們可以說,地址指向該變量單元。指針就是地址。
int main()
{
int a = 10;
int b = 20;
int *p; //定義整型指針( 地址) 變量
p = &a; //”&” 取地址符,&a 是取a 的地址
int *p1 = &a; //p1指向a
*p = 100; //*p: 對p 解引用, 即爲a=100
p = &b; //p指向b
*p = 200; //b = 200
int **pp = &p; // 二級指針變量pp 賦值爲p 的地址
*pp = &a; //p指向a
**pp = 1000; //a = 1000
*pp = &b; //p指向b
**pp = 2000; //b = 2000
}
數組名arr表示整個數組 ——int arr[] = {1, 2, 3, 4, 5, 6 ,7, 8 ,9 ,10};
1.在定義數組的同一個函數中,sizeof(arr) //40
2.在定義數組的同一個函數中,&arr+1
int main()
{
int arr[] = {1,2,3,4,5};
int *p1 = (int *)(&arr+1); //加一個數組
printf("%d\n",p1[-2]); //4,*(p1-2)
int *p2 = (int *)((int)arr+1); //加一個字節
printf("%x\n",*p2);
return 0;
}
從圖中可以看出,p1的地址爲0xdcfaac ,&arr的地址爲0xdcafa98;倆者相差剛好是數組arr的大小,由此得知&arr+1是加了整個數組;p2和&arr的地址相差1,由此得知arr+1加了一個字節。