关于网友提出的“ 新人求助 const声明的指针为什么没赋值也报错”问题疑问,本网通过在网上对“ 新人求助 const声明的指针为什么没赋值也报错”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 新人求助 const声明的指针为什么没赋值也报错
描述:c语言指针对象赋值
声明了const的指针不能改变指针指向对象的值
但在下面的代码中我并没有改变数组a的值啊?
报错
[Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]
是怎么回事呢?
谢谢大家!
#include"stdio.h"
#include"stdbool.h"
bool s(const int a[],int n,int key)
{
for(int *i=a;i<>
{
if(*i==key)
{
return 1;
}
}
return 0;
}
int main(void)
{
int a[5],b;
for(int i=0;i<5;i++)
{
a[i]=i;
}
scanf("%d",&b);
printf("%d",s(a,5,b));
}
解决方案1:
朋友 我纠正一下,const_cast
只能脱去变量的const,即你可以把const int *转为int*
解决方案2: 楼上说的对。问题就出在a赋值给i。出现类型错误,但是在不同的编译器下编译结果不一样,换句话linux下gcc编译只是一个警告。
int i;
for(i=0;i<>
{
if(*(a+i)==key)
这样写也挺好的,谁都能看懂。
解决方案3: 编译器做类型检查,const 指针不能赋值给非const指针,这个是语法规定,报错是应当的。至于你到底有没有修改内存,那是你自己的事。
解决方案4: int * a可以cast成const int *
反过来不行
以上介绍了“ 新人求助 const声明的指针为什么没赋值也报错”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2554899.html