关于二级和多级指针的愚蠢的疑问
想到一个很蠢的问题,但是无法说服自己的问题,请听题:假设定义了一个变量int a=10;那么如果我们不定义指针的话,内存会自动给系统编排地址吧?就是说我们不定义指针的话,电脑是不是也得自动安排一个内存区域自己去记住a的地址?如果这样的话,那系统不是还得再安排一个内存去记住,a的地址的地址,无限套娃的话,内存岂不是因一个变量就耗光了?很蠢的问题,不要打我,有没有大佬教我做人,在线求挨打。
还是说我们不定义指针的话,系统就不会分配内存去存储变量的地址了? 什么乱七八糟的。。? 本帖最后由 Croper 于 2020-1-10 00:34 编辑
编译器记住哪个变量是哪个就好了啊,
编译完了就不存在变量这种东西了,全部都是地址,以及地址偏移。
取一个变量的值就是取一个特定地址上的值,
取一个指针也是取一个特定地址上的值,解引用就是把这个值当成地址再取一边。
本帖最后由 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 个字节空间。根本就不存在所谓 "无限套娃" 的问题。 jackz007 发表于 2020-1-10 00:31
int a ; 在定义变量 a 的时候,编译程序会从堆栈中为变量 a 分配 4 个字节内存,用于保存变量值, ...
也就是说系统只有我们指针或者普通变量只有我们在定义或引用的时候系统才会给他分配内存对吧,不引用或不定义就不会自动分配了对吧?如scanf(“%d”,&a),这个时候有&a,才会有a的指针对不?否则,编译器就是一直记住a的变量值。 Croper 发表于 2020-1-10 00:21
什么乱七八糟的。。?
{:5_109:}我自己都觉得乱七八糟的,但是还得问问,才能缕的更清楚。哈哈
页:
[1]