标题:c语言局部变量分配问题,这样通过指针访问存在问题吗
取消只看楼主
Tsing_Man
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2018-9-1
结帖率:0
已结贴  问题点数:20 回复次数:3 
c语言局部变量分配问题,这样通过指针访问存在问题吗


int main()
{
    int a=36,b=63,c=656,i=0;
    int *p=&c;
//    printf("%p  %p  %p \n",&a,&b,&c);
    printf("%d %d %d\n",p[0],p[1],p[2]);
    return 0;
}
代码如上,附件贴了运行结果,这样访问存在问题吗?为什么注释代码放开后,运行就正常了,仅仅打印一次地址,有什么不同吗
搜索更多相关主题的帖子: c语言 分配 访问 存在 int 
2018-09-01 22:06
Tsing_Man
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2018-9-1
得分:0 
希望大家能帮忙看看
2018-09-01 22:24
Tsing_Man
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2018-9-1
得分:0 
以下是引用吹水佬在2018-9-1 22:48:13的发言:

用 p 指向 c 就可以通过 p 肯定可以得到 a 或 b ???

谢谢您的回复,因为是局部变量,存储在栈区,地址都是连续的,从后面打印可以看出来,我主要疑惑,为什么把那句注释打开,就可以打印出正确的值了。
2018-09-02 09:12
Tsing_Man
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2018-9-1
得分:0 
以下是引用吹水佬在2018-9-2 09:32:04的发言:


栈区地址也不一定是连续,有兴趣可以看看编译后的代码。
或者说这种做法也属于“未定义行为”

谢谢您的关注,那为什么 //    printf("%p  %p  %p \n",&a,&b,&c);这句代码放开,就总能得到正确答案了,&a仅仅获得a的地址,打不打印都是存在的啊。
2018-09-02 09:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489577-1-1.html




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

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