C语言 指针问题

2025-04-19 11:53:00
推荐回答(4个)
回答1:

int a[2][3], *p[3];
分析:
对于a来说,毫无疑问,a是一个二维数组,a的值指向int类型的起始地址。
对于p,首先p先与'[ ]'结合 p[3],表示p是一个数组,p再与'*'结合成' *p[3] ',表示p数组里面存放的时指针变量,最后与int类型结合成' int *p[3] ',表示数组存放的时指向int类型的指针。
p[0]=&a[1][2];
所以p[0]的值是一个指向int类型的指针。
而a[1][2]的值是一个int类型,再加上'&'(取地址符)得到的就也是一个指向int类型的指针了。
所以p[0]=&a[1][2];成立。
建议ZL看看 《让你不再害怕指针》
回答完毕.

回答2:

*p[3]是一个指针数组 每一个数组元素都是一个int指针
A的错误在于p是这个指针数组的指针 如果把p的值改了 那这个指针数组就成垃圾内存了

回答3:

*p[3] 这是指针数组 里面的元素就是指针

正常来说A也是没问题的 但有可能会报错。需要强转,但寻址是没问题的

回答4:

若有定义语句:int a[2][3],*p[3];则以下语句中正确的是(C)
A. p=a;//错误,类型不匹配
B.p[0]=a;//错误,类型不匹配
C.p[0]=&a[1][2];//正确
D.p[1]=&a;//错误,类型不匹配

测试程序如下。下面这个程序能编译成功,换成其他不能成功。
#include
void main()
{
int a[2][3],*p[3];
p[0]=&a[1][2];
}