void foo()
{
char *c1 = "abc";
static char *c2 = "abc";
char *c3 = malloc(10);
strcpy(c3, "abc");
}
在函数
foo
中,我假设:
c1
是一个本地指针,应该在堆栈上;
c2
是一个静态指针,应该在堆上;
c3
在堆上。根据我的假设,我绘制了一个关于指针和它们所指向的字符串字面量的图表。
stack rodata heap
| | | | | |
| c1 |------>| "abc" |<--------| c2 |
| .. | | | \ | .. |
| | | | `------| c3 |
| | | | | |
我的假设和图表没错吧?
然而,我不太明白为什么c3
应该位于堆上?c3
只是一个指向地址(位于堆上)的char *
,指向一块内存并不意味着c3
本身就在堆上,对吗?