人到中年有点甜
本声明:char s[] = "hello";创建一个对象 - 一个char大小为6 的数组,称为s,使用值初始化'h', 'e', 'l', 'l', 'o', '\0'。这个数组在内存中分配的位置,以及它的存在时间取决于声明出现的位置。如果声明在一个函数内,它将一直存在到声明它的块的结尾,并且几乎肯定会在栈上分配; 如果它在函数之外,它可能存储在“初始化数据段”中,该“初始化数据段”在程序运行时从可执行文件加载到可写存储器中。另一方面,这个声明:char *s ="hello";创建两个对象:包含值的只读数组,char包含值'h', 'e', 'l', 'l', 'o', '\0',没有名称且具有静态存储持续时间(意味着它在程序的整个生命周期中存在); 和一个名为pointer-to-char的变量,调用它s,该变量使用该未命名的只读数组中第一个字符的位置进行初始化。未命名的只读数组通常位于程序的“文本”段中,这意味着它从磁盘加载到只读存储器中,以及代码本身。s指针变量在内存中的位置取决于声明出现的位置(就像在第一个示例中一样)。