指针的定义问题

2025-03-07 02:04:13
推荐回答(4个)
回答1:

*pa[3]是指针数组
指针数组就是说是一个数组,数组中的每一个成员是一个指针。举例如下:
char *a[5]={"tan","li","cheng","fang","zheng"};
定义指针数组a,存放姓名,a有5个成员,即a[5]是包含5个指针元素的指针数组,5个指针中每个的值是该字符串的首地址,也就是说
a[0]=字符't'的地址
a[1]=字符'l'的地址
a[2]=字符'c'的地址
a[3]=字符'f'的地址
a[4]=字符'z'的地址
为何要这样?因为各个名字是字符串不是单个字符,也就是说它相当于二维数组
tan
li
cheng
fang
zheng
也就是相当于有行有列,所以要找到数组中的某一个字符就要先找到所在的行即a[i],这里a[i]就是个指针指向每行的第一个字符的地址,*(a[i]+j)就是第i+1行第j+1个元素。也就是说
char *a[5]={"tan","li","cheng","fang","zheng"};
等价于定义
char a[5][6]={"tan","li","cheng","fang","zheng"};
只是对于字符串,函数strncpy,strcpy,strcmp,strlen,strcat,strstr,strchr的参数都是指针变量都是一个指向字符串首字符的地址的指针,故用指针数组表示一个二维数组更方便形象,有些数据结构复杂,用指针数组来指向它们,当要改变数据的顺序时只要改变指向它们的指针的顺序不必改变数据本身,这样可以简化问题。

回答2:

要理解这个问题,可采用“先右后左”的原则。
int *pa[3],从变量pa开始,先向右看,组合为pa[3],可知pa为一个包含3个元素的数组,再往左看,可知pa为一个包含3个元素(int型指针)的数组。
再给你一个例子:int (*pa)[3],同样的方法,从变量pa开始,先向右看,右边为右括号,所以往左看,可知pa为一个int型指针,再向右看,可知pa为指向一个3元素(int型)数组的指针。

回答3:

我想你是打错了.应该是(*pa)[3],它和*pa[3]是不同的.正像楼上说的.朋友.

回答4:

*pa[3]是指针数组,跟其他数组没有什么区别。不要想的太复杂