编译出现warning: assignment from incompatible pointer type的警告
答案:2 悬赏:0 手机版
解决时间 2021-02-02 07:19
- 提问者网友:凉末
- 2021-02-01 07:57
#include
shur(char *p)
{int i;
for(i=0;i<3;i++)
gets(p+i);
}
main()
{char str1[3][20];
int i;
shur(str1);
for(i=0;i<3;i++)
printf("%s\n",str1[i]);
}
最佳答案
- 五星知识达人网友:荒野風
- 2021-02-01 09:14
意思是类型不匹配
全部回答
- 1楼网友:污到你湿
- 2021-02-01 09:50
不同的编译器,对于不同类型间的指针变量进行赋值的编译检查是不一样的,有的报警告,有的报错误,如以下代码:
int main()
{
char a[3][6]={"hello", "world"};
char *p;
p=a;
printf("%c\n", *p ); //输出h
return 0;
}在devc++工具下,编译通过,报警告: [warning] assignment from incompatible pointer type
在vc6工具下,编译出错,报错误:error c2440: '=' : cannot convert from 'char [3][6]' to 'char *' types pointed to are unrelated; conversion requires reinterpret_cast, c-style cast or function-style cast (大意为类型转换错误,需要强制转换)
如果确信以上代码就是编者想要的,想去除警告或是错误,可以通过强制转换来完成:
int main()
{
char a[3][6]={"hello", "world"};
char *p;
p=(char *)a; //只需要改这里,强制转换成与p的类型相一致
printf("%c\n", *p ); //输出h
return 0;
}再到两个工具上进行编译,可以通过了!
附:以上是想通过一个一维指针来访问一个二维数组,因为二维数组是连续存放数据的,所以,可以通过一维指针来遍历到二维数组中的所有元素。但如果是想通过指针来逐行访问二维数组的数据,则应该采用数组指针来编写代码:
#include
int main()
{
int i;
char a[3][6]={"hello", "world"};
char (*p)[6];
p=a; //可以直接赋值,不会有错
for( i=0;i<3;i++ )
printf("%s\n", p++ ); //输出一行,并将p指向下一行
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯