您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 新人求助 const声明的指针为什么没赋值也报错

新人求助 const声明的指针为什么没赋值也报错

来源:网络整理     时间:2016/7/12 15:08:29     关键词:

关于网友提出的“ 新人求助 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:

引用 3 楼 我是冰的回复:
int * a可以cast成const int *
反过来不行

朋友 我纠正一下,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

相关图片

相关文章