通过const修饰的变量无法通过指针修改变量值?

通过const修饰的变量无法通过指针修改变量值?

#include <stdio.h>

int main() {
    double const pi = 3.1415926;
    printf("%f\n", pi);

    double *p = &pi;

    *p = 3.88;

    printf("%f\n", pi);

    return 0;
}

不同版本的c行为会不一样吗,我这样写的话是修改不了pi的值的也。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
upcan 2022-10-17 18:52:52

我在我的centos上试了下是可以的

[root@localhost week02]# ./a.out 

3.141593

3.880000

[root@localhost week02]# cat const.c 

#include <stdio.h>

 

int main() {

    double const pi = 3.1415926;

    printf("%f\n", pi);

 

    double *p = &pi;

 

    *p = 3.88;

 

    printf("%f\n", pi);

 

    return 0;

}

[root@localhost week02]# 


山行老师 2022-10-09 13:05:38
结论是不能执行。const是你自己加的,如果能通过指针间接修改const变量,那加了等于没加;这种人为的限定就不要人为的去打破。
山行老师 2022-10-09 00:15:56

是的,目前这样的写法不能修改。

1)程序第7行不合法,应该是double const *p = &pi;//对const修饰的变量取地址,相应的指针也有const属性.

2)程序第9行,等价于pi = 3.88,这是不被允许的;//对const修饰的变量赋值是不被允许的,至少目前没有去掉const属性;

  • 提问者 海神名 #1

    但是程序是能够正常编译执行的吗?

    2022-10-09 09:56:59
  • 结论是不能执行。const是你自己加的,如果能通过指针间接修改const变量,那加了等于没加;这种人为的限定就不要人为的去打破。

    2022-10-09 13:06:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师