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));
}
为什么这样写是提示错误的 展开
void main()
{
int s[2][2]={1,2,3,4};
int *p;
p=s;
printf("%d",*(p+1));
}
为什么这样写是提示错误的 展开
展开全部
这个代码会报告以下错误:
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;也是可以正常工作。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询