请看下面的陈述:
现在,语句A和C之间有什么区别吗?我的意思是它们都应该在堆栈上,不是吗?只有b会在静态位置。那么,“jgkl”不会在整个程序的生命周期中存在于静态位置吗?因为它应该是只读/常量?请澄清。
char a[5]="jgkl"; // let's call this Statement A
char *b="jhdfjnfnsfnnkjdf"; // let's call this Statement B , and yes i know this is not an Array
char c[5]={'j','g','k','l','\0'}; // let's call this Statement C
现在,语句A和C之间有什么区别吗?我的意思是它们都应该在堆栈上,不是吗?只有b会在静态位置。那么,“jgkl”不会在整个程序的生命周期中存在于静态位置吗?因为它应该是只读/常量?请澄清。
const
限定的(主要是出于历史原因)。尽管如此,程序仍然不允许对它们进行写操作。 - Gilles 'SO- stop being evil'printf()
的是该字符串字面量的地址。 - Heath Hunnicutta
的初始化器。当字符串字面值用作初始化器时,其内容被复制到数组中。关于答案的最后一句话,行为不是实现定义的。如果尝试修改字符串字面值,则行为是未定义的(参见§6.4.5/6和§6.7.8/32)。 - James McNellis