C中的内联字符串数组是否在堆栈中分配?

时间:2010-11-19 19:32:38

标签: c arrays string stack

在C中,考虑以下“内联”字符串数组:

char *string1 = "I'm a literal!";
char *string2 = malloc((strlen(string1) + 1) * sizeof(char));
//Do some string copying
...
char string3[] = {'a','b','c','\0'};
char *stringArray[] = {string1, string2, string3};

stringArray只包含三个指针的副本吗?

数组是否会在堆栈上分配?

3 个答案:

答案 0 :(得分:9)

stringArray在堆栈上分配,其每个元素都是指向char的指针。更具体一点:

  • string1指针位于堆栈上,其值是数据段中只读字符串的第一个字符的地址
  • string2指针位于堆栈上,其值是堆上分配的内存块的地址
  • string3是一个占用堆栈上4 * sizeof(char)个字节的数组
  • stringArray是一个占用堆栈3 * sizeof(char *)个字节的数组。

答案 1 :(得分:1)

是(它确实包含指针的副本(见下文)),是的(数组在堆栈上)。

string3不是指针,而是数组)。

答案 2 :(得分:0)

假设你的代码片段是一个函数的一部分(它看起来像是,因为你“做了一些字符串复制”),那么是的,除了string2的存储(因为它是malloc()ed)将是在堆栈上。