& 表示取地址
數組
* 表示取值ide
常量指針函數
指向一個常量的指針,spa
int a = 4;
int b = 6;
int const *p = &a; //常量指針
*p = 66; // 不能修改,指向的值是個常量(不能經過指針改變)(只能夠讀取,不可改變,函數參數chage(int const *p))
a = 44; // 變量自身能夠修改 p = &b;
指針常量
一個常量的值時指針;
int c = 66;
int d = 99;
int *const pn = &c;
c = 100; // 能夠修改
// pn = &d; // 不能夠修改,由於 指針pn是常量類型的指針
*pn = 1010; // 能夠經過指針修改指向的值
printf("%d",c);
指向常量的指針常量
------------------------------------------------------
const(*號)左邊放,我是指針變量指向常量;指針
const(*號)右邊放,我是指針常量指向變量;ci
const(*號)兩邊放,我是指針常量指向常量;it
指針變量能改指向,指針常量不能轉向!class
要是全都變成常量,鎖死了,我不能轉向,你也甭想變樣!變量
----------------------------------------------------------------map
指針指向多維數組
int map[4][3] = {
{1,2,3},
{4,5,6},
{7,8,9},
{17,18,19}
}
int (*p)[3] = map;
p指針能夠看作這樣一個形式:
p[3] = map地址{
map[0]地址,
map[1]地址,
map[2]地址
}
map 地址:保存的是map[0]的地址,map[0]地址也是取map[0][0]來保存的。
*map 地址: 保存的是map[0][0]的地址, 雖然地址與map相同可是佔用大小不一樣
p :同上
*p:同上
*map+1 : 取得值是map[0][1]的一個地址。
*p+1:同上
map+1 : 取得值是map[1] / map[1][0]的一個地址
p+1 : 同上
*(map+1): 先取得map[1][0]的地址,再取值 , = 4
//地址相同
printf("p:\t%p\n", p);
printf("map:\t%p\n", map);
printf("*map:\t%p\n", *map);
printf("*p:\t%p\n", *p);
//地址相同
printf("map+1:\t%p\n", map+1);
printf("*(map+1):\t%p\n",*(map+1));
printf("p+1:\t%p\n",p+1);
printf("*(p+1):\t%p\n", *(p+1));
//地址相同
printf("*p+1:\t%p\n", *p+1);
printf("*map+1:\t%p\n", *map+1);
詳細代碼
int map[4][3] = { {1,2,3}, {4,5,6}, {14,15,16}, {7,8,9} }; int (*p)[3] = map; printf("%d\n", *(*p+1)); printf("%d\n", *(*(p+1))); printf("%d\n", *(*(map+1))); printf("p:\t%p\n", p); printf("map:\t%p\n", map); printf("*map:\t%p\n", *map); printf("*p:\t%p\n", *p); printf("map+1:\t%p\n", map+1); printf("*(map+1):\t%p\n",*(map+1)); printf("p+1:\t%p\n",p+1); printf("*(p+1):\t%p\n", *(p+1)); printf("*p+1:\t%p\n", *p+1); printf("*map+1:\t%p\n", *map+1);