C语言 指针问题
若有定义语句:inta[2][3],*p[3];则以下语句中正确的是()A.p=a;B.p[0]=a;C.p[0]=&a[1][2];D.p[1]=&a;答案是B,但是我...
若有定义语句:int a[2][3],*p[3];则以下语句中正确的是()
A. p=a;B.p[0]=a;
C.p[0]=&a[1][2]; D.p[1]=&a;
答案是B,但是我在其他地方看到似乎A这种表达也没有错误,还望高手能够解释一下。还有*p[3]是不是等价于*(p[3])? 展开
A. p=a;B.p[0]=a;
C.p[0]=&a[1][2]; D.p[1]=&a;
答案是B,但是我在其他地方看到似乎A这种表达也没有错误,还望高手能够解释一下。还有*p[3]是不是等价于*(p[3])? 展开
5个回答
展开全部
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看看 《让你不再害怕指针》
回答完毕.
分析:
对于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看看 《让你不再害怕指针》
回答完毕.
展开全部
*p[3]是一个指针数组 每一个数组元素都是一个int指针
A的错误在于p是这个指针数组的指针 如果把p的值改了 那这个指针数组就成垃圾内存了
A的错误在于p是这个指针数组的指针 如果把p的值改了 那这个指针数组就成垃圾内存了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p[3] 这是指针数组 里面的元素就是指针
正常来说A也是没问题的 但有可能会报错。需要强转,但寻址是没问题的
正常来说A也是没问题的 但有可能会报错。需要强转,但寻址是没问题的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
若有定义语句: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<stdio.h>
void main()
{
int a[2][3],*p[3];
p[0]=&a[1][2];
}
A. p=a;//错误,类型不匹配
B.p[0]=a;//错误,类型不匹配
C.p[0]=&a[1][2];//正确
D.p[1]=&a;//错误,类型不匹配
测试程序如下。下面这个程序能编译成功,换成其他不能成功。
#include<stdio.h>
void main()
{
int a[2][3],*p[3];
p[0]=&a[1][2];
}
追问
请问如何解释?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询