C语言关于一个作用域内的局部变量反复申请同一个栈区内存空间的事儿
情形如下:
#include <stdio.h>
#include <string.h>
int main()
{
char *temp = NULL;
char *temp1 = NULL;
int count = 0, bFlag = 1;
while (++count != 3)
{
for (int i = 0;; i++)
{
char buffer[20];
if (bFlag == 1)
{
strcpy(buffer, "afaw77ef");
temp = buffer;
bFlag = 0;
break;
}
else if (bFlag == 0)
{
strcpy(buffer, "2222");
temp1 = buffer;
break;
}
}
}
printf("%s %s\n", temp, temp1);
return 0;
}
我想大多数的人会认为输出的结果是:afaw77ef 2222。
但是实际输出结果是: 原因就出在char buffer[20]上。
我们打印一下每次buffer进行赋值时候它的地址。 ? ?我们发现两次buffer的地址都是effe98。可是明明char buffer[20]是一个局部变量,作用域仅仅作用域for循环里面,跳出for循环后编译器自动释放其内存,重新执行的时候正常逻辑应该是buffer重新在栈区申请内存(因为编译器申请内存空间是随机的)。 ? ?可是编译器还是申请原来的栈区内存空间,这是值得留意的。
总结 ? ?作用域内的局部变量再次执行的时候(即已经跳出该作用域,二次及多次进入该作用域的时候),局部变量在栈区申请的内存空间(地址)不变。
|