笔记,指针与数组,数组指针,指针数组

    xiaoxiao2025-12-31  2

    假设有

    int a[10]; //一维数组 int (*p)[10]; //数组指针 int *b[10]; //指针数组 int c[10][10] //二维数组

    要点

    1.数组名相当于指向数组中第一个元素的指针。a等价于&a[0]啊,*(a+i)== a[i];

    2.()优先级高,*p是先结合的,因此p本质是指针,是指向数组的指针,p等价于 &a;

    3.[]优先级高于*, b先与[]结合, b本质是数组,数组里面的元素都是指针。

    4.a是数组第一个元素的地址,&a是数组的地址,两者值是一样的,但是表示的意义不同。意义不同带来如下不同,(a+1)移动的是一个int的长度,而(&a+1)移动的是整个数组的长度也就是10个int的长度。因为当指针与整数加减的时候,表示指针指向的位置移动一个指针所代表类型的长度。

    5.看二维数组时可以这么看(c[0])[0], c[0]相当于一个一维数组的数组名a,c[0]同样等价于&c[0][0];二维数组的数组名c等价于 &c[0],因此*(c+i)等价于c[i],*(*(c+i)+j)等价于c[i][j],由于c[0]相当于数组名a,因此c同样相当于指向数组的指针即p。

    以下赋值是合法的:

    p = c; p = &a; b[0] = a

    转载请注明原文地址: https://ju.6miu.com/read-1305529.html
    最新回复(0)