指针数组和数组指针

来源:互联网 发布:现货黄金源码 编辑:程序博客网 时间:2024/06/06 22:43

数组指针和指针数组

  数组指针和指针数组在形式上的区别主要是牵涉运算符的优先级,在运算符优先级上,()>[]>*

(1)数组指针,也叫行指针,形式:int (*p)[3]

()优先级高,所以首先p是一个指针,指向一个一位数组,这个数组的长度是3,也是p的步长,执行p+1,p要跨过3个整形数据的长度

int a[2][3];

int (*p)[3];//定义一个数组指针,指向含有3个元素的一位数组

p=a;//该二维数组的首地址付给p,也就是a[0],或者是&a[0][0]

p++;//执行p=p+1,p直接指向a[1][]

所以数组指针也叫做行指针

(2)指针数组,形式:int *p[3]

[]优先级高,所以首先和p结合成一个数组,再有int *说明这是一个整型指针数组,他有n个指针类型的数组元素,注意:这里执行p+1是错误的,这样的赋值也是错误的,p=a,因为p是个不可知的类型,只存在p[0],p[1],p[2],并且他们分别是指针变量,用来存储整型变量的地址,但是可以这样赋值,*p=a,这里的*p表示指针数组的第一个元素的值,也就是a[0]的地址,a的首地址的值

所以要将二维数组赋给指针数组:

int *p[3];

int a[3][4];

for(i=0;i<3;i++)

  p[i]=a[i];

这里的int *p[3]表示一个一维数组存放着三个指针变量,分别是p[0],p[1],p[2].

要分别赋值

两者的区别是数组指针只是一个指针变量,似乎C语言里专门来指向二维数组的,他占有内存中的一个指针变量的存储空间,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

 

原创粉丝点击