我有一个问题: 早些时候我用一个简单的程序拆解了一个:
char *tab = "hello";
我看到,与数组不同,只有字符串的地址被压入堆栈。 所以我想知道那里存储的字符串的内容在哪里?
答案 0 :(得分:0)
字符串"hello"
当然是可执行文件中包含的静态数据,逐字逐句。程序运行时,这些数据已在内存中可用,所有静态和常量数据都是。由于您只使用其地址,因此只有该地址被压入堆栈。
现在,如果你创建一个这样的数组:
char tab[] = "hello";
你告诉编译器你要在堆栈上创建一个数组 ,一个你可以自由存储任何东西的数组。并告诉编译器使用常量静态字符串"hello"
初始化该数组,因此它将数据从静态存储复制到堆栈上的数组。