C 在堆栈上声明整数指针并在堆上赋值

C 在堆栈上声明整数指针并在堆上赋值,c,stack,heap-memory,C,Stack,Heap Memory,使用heap,我有以下几点: int *cnt = malloc(sizeof(int)); cnt[0] = 5; *cnt = 0; 我为1 int声明一个指针和malloc空间 我可以通过cnt[0]=5或*cnt=0进行赋值。在本例中,第二个赋值覆盖第一个赋值 如何使用堆栈执行此操作 int *cnt = NULL; 这会从堆栈中分配内存吗?如何为cnt赋值?(即整数,而不是地址)如果使用堆栈,实际上不需要指针。您只需执行以下操作: int cnt[1]; cnt[0] = 5;

使用heap,我有以下几点:

int *cnt = malloc(sizeof(int));
cnt[0] = 5;
*cnt = 0;
我为1 int声明一个指针和malloc空间 我可以通过cnt[0]=5或*cnt=0进行赋值。在本例中,第二个赋值覆盖第一个赋值

如何使用堆栈执行此操作

int *cnt = NULL;
 

这会从堆栈中分配内存吗?如何为cnt赋值?(即整数,而不是地址)

如果使用堆栈,实际上不需要指针。您只需执行以下操作:

int cnt[1];
cnt[0] = 5;
*cnt = 0;
第一个赋值被第二个赋值覆盖,可能会被优化掉

如果确实需要指针变量,则可以执行以下操作:

int cnt_var;
int *cnt = &cnt_var;
cnt[0] = 5;
*cnt = 0;

这需要更多的堆栈空间,因为它同时分配
int
变量和
int*
指针。

如果使用堆栈,实际上不需要指针。您只需执行以下操作:

int cnt[1];
cnt[0] = 5;
*cnt = 0;
第一个赋值被第二个赋值覆盖,可能会被优化掉

如果确实需要指针变量,则可以执行以下操作:

int cnt_var;
int *cnt = &cnt_var;
cnt[0] = 5;
*cnt = 0;
这需要更多的堆栈空间,因为它同时分配
int
变量和
int*
指针