error C2440: '=' : cannot convert from 'int [2][2]' to 'int *'

#include<stdio.h>voidmain(){ints[2][2]={1,2,3,4};int*p;p=s;printf("%d",*(p+1));}为什么这样... #include<stdio.h>
void main()
{
int s[2][2]={1,2,3,4};
int *p;
p=s;
printf("%d",*(p+1));
}
为什么这样写是提示错误的
展开
 我来答
geniepengsz
2015-11-10 · TA获得超过2万个赞
知道大有可为答主
回答量:1.2万
采纳率:97%
帮助的人:2321万
展开全部

这个代码会报告以下错误:

 error C2440: '=' : cannot convert from 'int [2][2]' to 'int *'

意思是:无法把2*2的整型数组(地址)转变成整型指针。

修改成:

#include<stdio.h>

void main()

{

 int s[2][2]={1,2,3,4};

 int *p;

 p=s[0]; 

 printf("%d",*(p+1));

}

则可以编译通过。

原因:

把s理解成1维数组,每个元素长度是2*sizeof(int),

所以指针赋值操作p=s;就是把一个2*sizeof(int)类型变量地址赋值给一个int类型变量指针,发生类型指针转换错误。

而p=s[0];是第一排元素(默认指向其中的第一个元素),其中每个元素都是int类型,所以这样的赋值没有问题。

另外,也可以用强制类型转换装换指针地址类型,如:p=(int*)s;也是可以正常工作。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式