gpt4 book ai didi

c - 我是否以定义的方式使用局部变量?

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:31 25 4
gpt4 key购买 nike

我不确定我创建局部变量的方式是否是未定义的行为。

N 和 L 都持有指向临时堆栈地址的指针。这样安全吗?编译器会忘记我正在使用指向堆栈地址的指针并用其他内容(例如其他局部变量)覆盖它吗?我知道一旦函数的作用域结束,它就不安全了。但我不确定下面的例子。任何见解将不胜感激。感谢您的时间。

struct Node { /* ... */ };

struct Node*
Node_setNode(struct Node* node)
{
/* ... */
return node;
}

struct List { /* ... */ };

void
List_push(struct List* list, struct Node* node)
{
/* ... */
list->next = node;
}


int main()
{

struct Node* N = Node_setNode((& ((struct Node){ 0 })));
struct List L;
List_push(&L, (& ((struct Node){ 0 })));

return 0;
}

最佳答案

堆栈的全部意义在于您可以将东西压在它上面。

当您调用另一个函数时,您会压入一个新的堆栈帧及其局部变量,而不会影响 main() 的下层堆栈帧。

在函数中声明的变量将保留在其堆栈中,直到它返回。

关于c - 我是否以定义的方式使用局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232334/

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