库存对应于char *的字符串在哪里?

时间:2014-01-04 13:15:06

标签: c

我有一个问题: 早些时候我用一个简单的程序拆解了一个:

char *tab = "hello";

我看到,与数组不同,只有字符串的地址被压入堆栈。 所以我想知道那里存储的字符串的内容在哪里?

1 个答案:

答案 0 :(得分:0)

字符串"hello"当然是可执行文件中包含的静态数据,逐字逐句。程序运行时,这些数据已在内存中可用,所有静态和常量数据都是。由于您只使用其地址,因此只有该地址被压入堆栈。

现在,如果你创建一个这样的数组:

char tab[] = "hello";

你告诉编译器你要在堆栈上创建一个数组 ,一个你可以自由存储任何东西的数组。并告诉编译器使用常量静态字符串"hello"初始化该数组,因此它将数据从静态存储复制到堆栈上的数组。