1、指向一维数组的指针指定义了指针变量,并给其赋值为一维数组的首地址或数组元素的地址。比如:int
a[10],*p;
p=a;或p=&a[i];当定义了指向一维数组的指针后,就可以使用指针访问数组元素了。也就是说对数组元素的访问方式又多了一种方法。比如前面我们定义了指向一维数组a的指针变量p,我们就可以用*p得到其所指向的数组元素。
2、指向一维数组的指针不能访问二维数组中的元素及它们的地址。二维数组中有另外的指针形式定义和访问数组元素。
指向一维数组的指针:int
a[10]
,
a
是一维数组的指针
指向数组的指针变量:int
a[10]
;
int
*p
=
a;
p
指向数组的指针变量。
相同:都能访问数组的元素,如
a[i]
和
p[i],
*(p+i)
等价。
区别1:
a
是一个指针常量,不能改变它的值。
如
int
a[10];
int
b[10];
a=b;
//
试图改变一个常量的值,非法操作!
p
是一个指针变量量,能改变它的值。
如
int
a[10];
int
*p
=
a;
int
b[10];
*p
=
b;
//
试图改变一个变量的值,合法操作!
区别2:
int
a[10];
int
*p
=
a;
printf("%d
%d",sizeof(a),sizeof(p));
//
输出
40
,
4
用
sizeof
计算指针的大小时,
如果是指针常量,结果是这个指针常量指向的区域的大小。如
a.由
10
int
元素,
占用
4
*
10=40
个字节。
如果是指针变量量,结果是这个指针变量本身的大小。指针变量一般占用
4
个字节。
指向一维数组的指针只是个指针的一种应用,意思是说定义了一个指针,它指向一维数组。
用指针访问数组是说指针的用途,意思是可以用指针来访问数组,比如int
*p=(int
*)a[0];*(p+1)=a[1].