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,对吧?