结构标记和指向结构的指针是否相同?

问题描述:

Struct标签和指向Struct的指针有什么区别?是相同的?或者这是我的例子,是obj和* var两个不同的内存位置?结构标记和指向结构的指针是否相同?

#include <stdio.h> 
#include <stdlib.h> 

struct alloc { 

    char data; 
}; 

int main(int argc, char** argv) { 

    struct alloc obj; 
    struct alloc *var = calloc(5,sizeof(struct alloc)); 
    (var -> data) = 'P'; 
    printf("Data:%d",obj.data); 

    return (EXIT_SUCCESS); 
} 
+2

[静态内存分配和动态内存分配之间的差异]的可能重复(https://*.com/questions/8385322/difference-between-static-memory-allocation-and-dynamic-memory-allocation) –

是的,他们是。 obj的内存是静态分配的(在堆栈上),而var是动态分配的(在堆上)。主要的实际区别是,静态分配的对象在块的末尾被销毁,但您必须手动释放内存以获取动态分配的对象(以防止内存泄漏)。

您可以找到有关该主题的更多信息here