一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。

如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。

在前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“单级间址”。而如果通过指向指针的指针变量来访问变量则构成“二级间址”。

数组的元素值为指针则是指针数组

1、设:char *s[]={"red","blue","green"};

则s、s[0]、s[1]、s[2]的含义各是什么?

(1)s是一个指针数组(由指针组成的数组)。s是一个二级指针(常量),存储了这个数组的首地址。因此,s++或s--均是错误的。但s+1是有意义的,为s[1]的首地址,即*(s+1)就是s[1]。

(2)s[0]、s[1]、s[2]是数组s的三个元素,均为指针变量,分别存储字符串"red"、"blue"、"green"的首地址。**(s+1)即*s[1],其值为'b'。

2、"char *a[3];"与"char (*a)[3];"有何差别?

(1)"char *a[3];"定义的是一个指针数组,为二级指针常量,元素为指针变量(存储char类型数据的地址)。如:

char x=1,y=2,z=3,*a[3]={&x,&y,&z};


这时**a就是x的值,**(a+1)就是y的值,**(a+2)就是z的值。

(2)"char (*a)[3];"定义的是一个指向一维数组的指针变量。如:

char p[]={1,2,3,4,5,6,7,8,9},(*a)[3]=p;


这时a指向{1,2,3}的首地址,a+1指向{4,5,6}的首地址,a+2指向{7,8,9}的首地址。因此有:**a的值为1、*(*(a+1)+2)的值为6。


声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:312334557@qq.com 我们将配合处理!

原文地址:《数组的元素值为指针则是指针数组(将指针的值赋值给数组)》发布于2022-07-16 14:38:22