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

标签 c

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

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/

相关文章:

c - 如何使用 OpenGL 绘制冰淇淋

C - 为什么在将单个字符分配给数组时自动添加字符串终止符?

c - 为结构内的结构数组分配内存

c - 向后台进程发送信号

c++ - 创建只读不可删除文件

c - 为什么使用fftw3更好

c - 它打印什么以及如何将其转换为指针算术?

c - OSX + homebrew + CMake + libpng 版本不匹配问题

C - (Printf) 强制显示零

c++ - 调用 MPI_Win_create 时窗口如何匹配