none
const常量修改中出现的问题 RRS feed

  • 问题

  • 先上代码:

    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
    const int x = 2;
    const int *p = &x;
    int *p1 = (int *)p;
    printf("%d\n", *p1);
    *p1 = 12345;
    printf("%d\n", *p1);
    printf("%d\n", *p);
    printf("%p\n", &x);
    printf("%d\n", x);
    system("pause");
    };
    我想通过指针的方式修改const变量但是得到的结果;但是呢用.c和.cpp去调试得到了不同的结果

    用.c 的文件去调试没问题  输出的都是三行12345

    但是用.cpp的文件去调试就出现问题了:

    首先前两行输出(使用指针的方法输出)都没问题,最后一行输出 printf("%d\n", x);得到的结果却是2

    在调试窗口看见x变量的值被修改成了12345但是输出的却是2,难道编译器读取常量不是从常量所在的空间读取的么?

    新手跪求求大神解答

    用的是 vs2013  做的实验
    • 已编辑 lclucy 2015年5月2日 1:18
    2015年5月2日 1:15

答案

  • 这是因为x是const变量,编译器对x在预处理的时候就进行了替换。编译器只对const变量的值读取一次。所以打印的是2。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 Shu 2017 2015年6月10日 2:39
    2015年5月2日 15:45
    版主
  • ?????
    • 已标记为答案 Shu 2017 2015年6月10日 2:40
    • 已编辑 Shi Xin 2015年7月27日 5:33
    2015年5月3日 17:34

全部回复

  • 这是因为x是const变量,编译器对x在预处理的时候就进行了替换。编译器只对const变量的值读取一次。所以打印的是2。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 Shu 2017 2015年6月10日 2:39
    2015年5月2日 15:45
    版主
  • 新手刚上路有些疑问麻烦大神解答一下噢~~

      1.c++不是兼容c的么,为嘛他们得到的结果不一样

     2.在c++中使用const常量,就相当于使用宏替换么;如果是这样的话我觉得给const常量分配空间就没有意义

    2015年5月3日 14:59
  • ?????
    • 已标记为答案 Shu 2017 2015年6月10日 2:40
    • 已编辑 Shi Xin 2015年7月27日 5:33
    2015年5月3日 17:34
  •   非常感谢大家的帮助 
    2015年5月5日 11:11