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



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

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