C語言指針輕鬆入門

& 表示取地址
數組

* 表示取值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);
相關文章
相關標籤/搜索