永发信息网

编译出现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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯