这似乎是一个非常基本的问题,但它一直在我的脑海中:
当我们分配一个局部变量时,它会进入堆栈。类似地,动态分配会导致变量位于堆上。现在,我的问题是,这个变量实际上位于堆栈还是堆上,还是我们只是堆栈和堆中的引用。
例如,
假设我声明一个变量int i
。现在这个i
分配在堆栈上。所以,当我打印地址时i
,这将是堆栈上的位置之一?对于堆也有同样的问题。
我不完全确定你在问什么,但我会尽力回答。
下面声明一个变量i
在堆栈上:
int i;
当我使用以下方式询问地址时&i
我得到了堆栈上的实际位置。
当我使用动态分配某些东西时malloc
,实际上有TWO正在存储的数据片段。动态内存分配在堆上,指针本身分配在堆栈上。所以在这段代码中:
int* j = malloc(sizeof(int));
这是在堆上为整数分配空间。它还在堆栈上为指针分配空间(j
)。变量j
的值设置为返回的地址malloc
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)