鱼C论坛

 找回密码
 立即注册
查看: 1078|回复: 5

[已解决]关于二级和多级指针的愚蠢的疑问

[复制链接]
发表于 2020-1-10 00:18:53 | 显示全部楼层 |阅读模式

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

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

x
想到一个很蠢的问题,但是无法说服自己的问题,请听题:
假设定义了一个变量int a=10;那么如果我们不定义指针的话,内存会自动给系统编排地址吧?就是说我们不定义指针的话,电脑是不是也得自动安排一个内存区域自己去记住a的地址?如果这样的话,那系统不是还得再安排一个内存去记住,a的地址的地址,无限套娃的话,内存岂不是因一个变量就耗光了?很蠢的问题,不要打我,有没有大佬教我做人,在线求挨打。

还是说我们不定义指针的话,系统就不会分配内存去存储变量的地址了?
最佳答案
2020-1-10 00:31:15
本帖最后由 Croper 于 2020-1-10 00:34 编辑

编译器记住哪个变量是哪个就好了啊,
编译完了就不存在变量这种东西了,全部都是地址,以及地址偏移。
取一个变量的值就是取一个特定地址上的值,
取一个指针也是取一个特定地址上的值,解引用就是把这个值当成地址再取一边。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-10 00:21:26 | 显示全部楼层
什么乱七八糟的。。?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-10 00:31:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Croper 于 2020-1-10 00:34 编辑

编译器记住哪个变量是哪个就好了啊,
编译完了就不存在变量这种东西了,全部都是地址,以及地址偏移。
取一个变量的值就是取一个特定地址上的值,
取一个指针也是取一个特定地址上的值,解引用就是把这个值当成地址再取一边。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-10 00:31:30 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-10 00:38 编辑

        int a ; 在定义变量 a 的时候,编译程序会从堆栈中为变量 a 分配 4 个字节内存,用于保存变量值,然后,编译程序会始终记住这 4 个字节内存,程序中所有对 a 的操作结果都会被保存在这内存的这 4 个字节空间中。如果定义一个指向 a 的指针 p,int * p = & a,那么,如果是 32 位程序,编译程序会从堆栈中为 p 分配 4 个字节内存空间,用于保存 p 的数值(变量 a 的内存地址),如果是 64 位的程序,p 占用的是 8 个字节空间。根本就不存在所谓 "无限套娃" 的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 08:17:31 | 显示全部楼层
jackz007 发表于 2020-1-10 00:31
int a ; 在定义变量 a 的时候,编译程序会从堆栈中为变量 a 分配 4 个字节内存,用于保存变量值, ...

也就是说系统只有我们指针或者普通变量只有我们在定义或引用的时候系统才会给他分配内存对吧,不引用或不定义就不会自动分配了对吧?如scanf(“%d”,&a),这个时候有&a,才会有a的指针对不?否则,编译器就是一直记住a的变量值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-11 08:35:59 | 显示全部楼层
Croper 发表于 2020-1-10 00:21
什么乱七八糟的。。?

我自己都觉得乱七八糟的,但是还得问问,才能缕的更清楚。哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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