鱼C论坛

 找回密码
 立即注册
查看: 5332|回复: 11

内存上的问题

[复制链接]
发表于 2013-9-7 21:53:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void main(){
    static char *p;
    char c;
    p=&c;
    printf("%d,%d\n",p,*p);
}
没有static比有static所输出的地址高出4字节,
不知道你们是不是这样,
若果是,我想知道为什么。。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-7 21:56:54 From FishC Mobile | 显示全部楼层
循环语句31有说。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 21:59:15 From FishC Mobile | 显示全部楼层
好像可以提高效率
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-7 22:06:47 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 22:41:33 From FishC Mobile | 显示全部楼层
HeartMark 发表于 2013-9-7 22:06
这个关循环事吗?

讲错了,-_-||是数组31里甲鱼顺便讲了下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 23:06:18 | 显示全部楼层
因为static和非static存储方式不一样 至于存储在全局还是堆区就要看具体编译器实现了 但是非static的是存在堆栈上的 你这里的static是放在全局的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-7 23:08:14 | 显示全部楼层
591821661 发表于 2013-9-7 22:41
讲错了,-_-||是数组31里甲鱼顺便讲了下

记得那么清楚……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-7 23:38:02 | 显示全部楼层
感觉你们都没答到点上啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-8 00:10:23 | 显示全部楼层
我想知道为什么。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-8 00:35:51 | 显示全部楼层
不知道我这段笔记能不能帮楼主解惑?
*内存主要分为四个大区
        1、code(代码区) 放代码的
        2、data(数据区)相当于全局变量,只有等程序退出时才释放内存。而 static会使得普通变量存放在data区,使得该变量变成全局变量。只有程序完全退出才释放内存。
        3、stack(栈区)相当于局部变量,放在栈区里的声明的数据,普通变量等,子程序用完就释放它们占的内存,C中普通变量(局部变量)就是放在栈区的。
        4、heap(这个区在规定的范围由程序员自己规定该区的大小)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-8 08:52:18 | 显示全部楼层
本帖最后由 liangfei44 于 2013-9-8 08:55 编辑

我来给你解答吧,这个问题有点意思的:


为什么有static char *p 会比char *p 的地址高出4个字节,那是因为在你的程序里

    static char *p;   ;有static的,系统会在全局变量区申请一块空间,而没有static,系统将在栈里申请一块
                                 空间

                                ;假设static 的空间地址为 00004300,而没有static的栈空间为00100010.
    char c;               ;这里为局部变量,那就得在当前的栈空间[00100010-4],因为栈是自上往下的,并且为
                                4字节,如果第一句为static的,那char c;这个栈空间便为[00100010],否则便为[00100010-4]

    p=&c;               ;这里是将指针指向栈空间地址。
    printf("%d,%d\n",p,*p); 所以,应该明白,有static和没有static为什么相差4字节了吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-8 10:20:57 | 显示全部楼层
liangfei44 发表于 2013-9-8 08:52
我来给你解答吧,这个问题有点意思的:

原来是自上往下问题,感谢楼上用心解答,其他人加油学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表