| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1047 人关注过本帖
标题:相同的指针 同时指向不同的值 ?
取消只看楼主 加入收藏
奇点点
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-9-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
相同的指针 同时指向不同的值 ?
我做了一个实验, 用一个普通指针指向一个常量, 然后通过指针修改了常量的值, 然后分别访问指针指向的值和常量原值, 竟然是不同的, 但是他们的地址却是相同的, 请高人指点.

代码运行没有报错, 只是报警告了, 因为我用普通指针指向常量了.

截图:

代码:
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void) {

    const int a = 10;
    int* pa = &a;

    *pa = 100;
    printf("%d, %d\n", a, *pa);
    printf("%p,%p\n", &a, pa);

    return 0;
}


运行结果
程序代码:
开始运行...
/workspace/CProject1/main.c:7:10: warning: initializing 'int *' with an expression of type 'const int *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
    int* pa = &a;
         ^    ~~
1 warning generated.
10, 100
0x7ffed0567e58,0x7ffed0567e58

运行结束。
搜索更多相关主题的帖子: 相同 指针 int 常量 指向 
2022-09-14 10:57
奇点点
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-9-14
收藏
得分:0 
好了没问题了, 是编译器的问题, 我用其他编译器这段代码是不能运行出结果的, 但我实验用的 Lightly 在线编译器竟然可以运行出结果, 不知道它是什么原理.
2022-09-14 11:05
奇点点
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-9-14
收藏
得分:0 
回复 3楼 吹水佬
我贴不了图, 我在 https://www. 运行的结果也是不同的值.
在这里用C++编译运行也是两个不同的值.

[此贴子已经被作者于2022-9-14 11:29编辑过]

2022-09-14 11:24
奇点点
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-9-14
收藏
得分:0 
学习了, 总的来说就是如果不按规矩办事, 让编译器帮忙擦屁股 就会出现这种情况, 不同编译器可能有不同的处理方法,
以后强转类型的时候都要多加注意, 常量就是常量, 用常量指针指常量, 不要乱搞就是了.

我找到一篇专门说明这种用指针修改常量的未定义行为的文章
https://
2022-09-14 17:56
快速回复:相同的指针 同时指向不同的值 ?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022222 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved