gpt4 book ai didi

c - 变量在内存中的位置,C

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:26 24 4
gpt4 key购买 nike

我在查看过去几年的 C 语言考试,遇到了一个我没有完全理解的问题。他们提供了一段简单的代码,并询问了不同变量在内存中的位置。选项是 heap stackunknows。我知道自动变量在堆栈中初始化,而动态分配的变量在堆中。

那么,第一个问题 - 什么是未知的?

这里是第二个问题的代码和正确答案的表格:

#include <string.h>
#include <stdlib.h>

typedef struct
{
char *_str;
int _l;
} MyString;

MyString* NewMyString (char *str)
{
MyString *t = (MyString *) malloc (sizeof (MyString)); //LINE 12
t->_l = strlen (str);
t->_str = (char*) malloc (t->_l + 1);
strcpy (t->_str, str);
return t;
}

int main()
{
MyString ** arr = (MyString**) malloc (sizeof (MyString*)*10); //LINE 21
int i;
for (i=0;i<10;i++)
{
arr[i] = NewMyString ("item"); //LINE 25
}
// do something
// free allocated memory
return 0;
}

这是我不理解的结果表

Variable     Line number     Memory location
arr 21 stack
*arr 21 heap
**arr 21 unknows
arr[5] 25 heap
arr[3]->_str[2] 25 heap
*(t->_str) 12 unknows

我想我理解了arr*arr,但是为什么**arr是未知的?其余的我根本无法回答,所以任何帮助都会很棒。我知道它很长,所以在此先感谢...

最佳答案

这是一道蹩脚的试题。 C 标准没有指定如何 存储分配——它只指定了语义。堆、栈等是特定实现的细节。阅读 C 中的存储类和存储持续时间。

变量 arr 分配在堆栈上(“自动变量”),但是表达式 *arr**arr 是通过跟随指针获得的,一般来说,仅仅给出指向它的指针是不可能说出内存分配在哪里的。类似的推理适用于另一个未知案例。

关于c - 变量在内存中的位置,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com