| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 744 人关注过本帖
标题:一般变量内存分配问题
只看楼主 加入收藏
剑子与剑痴
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2010-10-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
一般变量内存分配问题
写了段检测代码:
程序代码:
#include<stdio.h>
#include<string.h>

void
main()
{
    int x=35;             //电脑为变量分配是址由高地址向低地址分配
    char str[10];
    strcpy(str,"www.\n");/*共14个字母*/

    printf("sizeof(int)=%d",sizeof(int));
    printf("\nx=%d",x);
    printf("\nstrlen(str)=%d\n",strlen(str));

    printf("\n'o'=%d",'o');
    printf("\n*(str+10)=%d",*(str+10));

    printf("\n\n'r'=%d",'r');
    printf("\n*(str+10)=%d",*(str+11));
   
    printf("\n\n'g'=%d",'g');
    printf("\n*(str+10)=%d",*(str+12));

    printf("\n\n&x = %d",&x);                 //输出x的地址
    printf("\n&str[9] = %d",&str[9]);        //输出数组最后一个元素的地址
    printf("\n&str[0] = %d\n\n",&str[0]);   //输出数组第一个元素的地址

    printf("%d\n",str[13]);               //输出字符串最后一个元素的值
    printf("%d\n\n",&str[13]);           //输出字符串最后一个元素的地址
}
运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


在说一下我的分析吧:(我的机子在为局部变量分配内存时由高地址向低地址分配)

int型变量x占    4字节:1245053--1245050
char型数组str占10字节: 1245049--1245040(在这里要注意下,1245040为数组第一个元素地址,1245049为最后一元素地址)

结构:
图片附件: 游客没有浏览图片的权限,请 登录注册


前面4字节为int变量x的单元:
第一格地址:1245053,存储'\n'
第二格地址: 1245052, 存储'g'
第三格地址: 1245051, 存储'r'
第四格地址: 1245050, 存储'o'

好,现在问题来了:在我输出x的地址时,程序输出的是1245052,不是1245053;
                  在我输出x的值时  ,程序输出的是2663。注意到,
                     '\n'阿斯科玛为10,  换成2进制;0000 1010 ;
                      'g' 阿斯科玛为103,换成2进制;1011 0111 ;
                      读取x时为2663,对应2进制;0000 1010 1011 0111;

也就是说输出了1245053-1245052两字节的内容,但int在这里占4字节,后两字节被丢弃了。

有知道的高手吗



搜索更多相关主题的帖子: 内存 变量 分配问题 
2010-11-07 01:10
剑子与剑痴
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2010-10-7
收藏
得分:0 
自己顶下
2010-11-07 07:47
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:6 
百度大端法小端法,还有字符串是以'\0'结束的。

迭代的是人,递归的是神。
2010-11-07 08:50
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
收藏
得分:6 
x怎么输出2663呢?
2010-11-07 09:51
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
收藏
得分:0 
为什么用了strcpy后,x的值变成2663
2010-11-07 10:02
qb3276
Rank: 2
等 级:论坛游民
帖 子:24
专家分:42
注 册:2010-10-25
收藏
得分:6 
以下是引用gmac在2010-11-7 10:02:09的发言:

为什么用了strcpy后,x的值变成2663
因为前面的str[10],里面只有10个数,而楼主却用strcpy把14个元素复制给str,导致输出错误,这里出了问题
2010-11-07 18:22
qb3276
Rank: 2
等 级:论坛游民
帖 子:24
专家分:42
注 册:2010-10-25
收藏
得分:0 
我想这是由编译器的对齐方式决定的,使得地址必须为能被4整除,对齐是为了能够更快的进行存取运算。
2010-11-07 18:46
快速回复:一般变量内存分配问题
数据加载中...
 
   



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

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