求助:关于const的一道题

wei1985 2010-10-16 10:22:46
void change(int const *p)
{
*((int*)p) = 20;
}

int main()
{
int const x=10;
change(&x);
printf("%d",x);
system("pause");
}


在change函数里,*p的值已经改变为20了,但是出来后的输出结果还是10;为什么?
...全文
158 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
swl82560397pq 2010-10-16
  • 打赏
  • 举报
回复
输出是20啊
这种问题着实无聊,混淆视听
kestiny 2010-10-16
  • 打赏
  • 举报
回复
不好意思啊,重了
kestiny 2010-10-16
  • 打赏
  • 举报
回复
const是一个C语言的关键字,它限定一个变量不允许被改变。
再说*((int*)p)是指针的指针吧
kestiny 2010-10-16
  • 打赏
  • 举报
回复
const是一个C语言的关键字,它限定一个变量不允许被改变。
再说*((int*)p)是指针的指针吧
wei1985 2010-10-16
  • 打赏
  • 举报
回复
windows visual studio环境
kestiny 2010-10-16
  • 打赏
  • 举报
回复
const是一个C语言的关键字,它限定一个变量不允许被改变。
再说你的*((int*)p)好像是指针的指针吧
wei1985 2010-10-16
  • 打赏
  • 举报
回复
windows visual studio环境
wei1985 2010-10-16
  • 打赏
  • 举报
回复
windows visual studio 环境
wei1985 2010-10-16
  • 打赏
  • 举报
回复
windows VS 环境下
dooX8086 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 mymtom 的回复:]

作为.c编译输出20
最为.cpp编译输出10
[/Quote]
是不是关系到 “常量字符表” 的问题. (也就是存储位置)?
// 记忆中是这个术语,也可能记错了
mymtom 2010-10-16
  • 打赏
  • 举报
回复
作为.c编译输出20
最为.cpp编译输出10
南夕殿下 2010-10-16
  • 打赏
  • 举报
回复
x是一个常量,不允许修改
yyyay 2010-10-16
  • 打赏
  • 举报
回复
const型参数代表此参数仅用作输入用,是只读的,当然改变不了值咯
yyyay 2010-10-16
  • 打赏
  • 举报
回复
参数带const代表此参数仅用作输入用,所以不可能 改变它的值的
Athenacle_ 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chlk118 的回复:]

const是一个C语言的关键字,它限定一个变量不允许被改变。
再说*((int*)p)是指针的指针吧
[/Quote]

*((int*)p)不是指针的指针。这条语句的意思是把p的类型从const int型指针转化为 int 型指针,然后再取内容。
manytao 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 void_wuyu 的回复:]
我想说两句:
第一,const关键字只是标志这个变量不允许用这个名字修改,即这个名字是常量,是可以通过指针强转后修改的;
第二,函数传递的是地址,所以强转后修改的是实参;
所以你这里输出应该是20,如果是10,只能说你的编译器有问题或者不是C环境。
[/Quote]

你传的是地址 地址里的参数被实际修改。 你的main函数里的实参也会被修改。。。
乐CC 2010-10-16
  • 打赏
  • 举报
回复
我想说两句:
第一,const关键字只是标志这个变量不允许用这个名字修改,即这个名字是常量,是可以通过指针强转后修改的;
第二,函数传递的是地址,所以强转后修改的是实参;
所以你这里输出应该是20,如果是10,只能说你的编译器有问题或者不是C环境。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧