| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 493 人关注过本帖
标题:关于栈中变量分配的问题
只看楼主 加入收藏
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:7 
关于栈中变量分配的问题
写了个小程序,想看看局部变量包括指针变量在栈中的分配地址
程序代码:
#include <stdio.h>

/*
    test the pointer to pointer
*/
int main()
{
    char c;
    char *p1;
    char **p2;

    p1 = &c;
    p2 = &p1;

    printf("%p\n", &c);
    //printf("%p\n", p1);
    printf("%p\n", &p1);
    //printf("%p\n", p2);
    printf("%p\n", &p2);


    return 0;
}

输出结果是
0022FF1F
0022FF18
0022FF14
我知道在栈中,变量的分配是由高地址向低地址顺序分配,而且在32位系统中,指针变量分配四个字节,所以我明白p1和p2的地址相差4个值,但是不明白c的地址和p1的地址为什么相差这么多?按理说应该相差1的。
我将char c;改为int i;后,i的地址是0022FF1C,和我的想法就一致了。
请教字符c的地址为什么是这样?
搜索更多相关主题的帖子: color 
2015-10-26 16:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
研究这玩意儿有什么意义,浪费时间
P2 0022FF1F: XXXX
P1 0022FF18: XXXX
C  0022FF1F: ___X
2015-10-26 16:06
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
图片附件: 游客没有浏览图片的权限,请 登录注册

我运行的是间隔4个字节,可以理解为内存对齐,入栈出栈都是按地址总线所占字节数的倍数来定义变量占有的空间。

能编个毛线衣吗?
2015-10-26 16:12
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 2楼 rjsp
很多概念自己还是没弄清楚,所以自己敲代码检验检验。
您给的地址是不是有点问题,x是一个字节,_x是什么意思?
2015-10-26 16:20
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 3楼 wmf2014
内存对齐还不了解,我去查查,不过感觉有道理。
2015-10-26 16:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
字节对齐

总有那身价贱的人给作业贴回复完整的代码
2015-10-26 16:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
知道結果又能如何?

授人以渔,不授人以鱼。
2015-10-26 18:44
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 7楼 TonyDeng
知道原因,知道结果,心情就好了呀~
2015-10-26 21:24
快速回复:关于栈中变量分配的问题
数据加载中...
 
   



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

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