C语言随笔4:指针数组、数组指针

数组:

1:数组名为地址,表达方法:

Int A[10];

A;

&A;

&A[0];

数组名是指针常量

2:指针数组(每个元素都是指针

指针数组:double *a[10];

每个元素占4/8个字节;

3:数组指针:。int (*p2)[5];

指向数组的指针,在多维数组使用

p2指向 5个int的数组

p2+1:地址增加5个int变量的长度

指向二维数组的每行首地址.

注:(*p)的括号不可省略,[ ]的优先级高于*,若不加括号就是指针数组了。

初始化办法:int a[2][3];

   int (*p)[3] = a;

a将首地址给过去,3定义偏移量

a[i][j]              //直接访问

==*(*(a+i)+j)  //取内容符,通过数组名访问

==p[i][j]           

==*(*(p+i)+j)   //通过数组指针访问

a  二维数组

*(a+i) 等价于 a[i] //  直接访问成员 

a[i] 表示第i行的所有数据 ,数据长度为3*4=12byte

*(a+i)+j  表示第i行第j个元素的地址

*(*(a+i)+j)  取内容访问该元素

博客:

*(a+1)单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址(有第0行)

编译器遇到这种情况都会转换为指向该行第 0 个元素的指针

*(*(a+1)+1)表示第 1 行第 1 个元素的值。很明显,增加一个 * 表示取地址上的数据。

原书:

因为;

*(a+i) 等价于 a[i] //取内容符:

二维数组的内容是一维数组

一维数组的名字是行的首地址

所以

*(*(a+i)+j)  等价于*(a[i]+j) //

a[i] 是第i行首地址

*(a[i]+j) 等价于(a[i])[j]

在取内容符中 j 对应一维数组

偏移量j个int

猜你喜欢

转载自www.cnblogs.com/yyyyloveu/p/12234919.html