假设我有一个数组(函数的局部数组)和一个指针
char a[]="aesdf"
and char *b="asdf"
我的问题是在前一种情况下字符串文字是否"aesdf"
存储在只读部分,然后复制到本地数组或者类似于
char a[]={'a','e','s','d','f','\0'};
?
我认为在这种情况下,字符是直接在堆栈上创建的,但在之前的情况下(char a[]="aesdf"
) 将字符从只读部分复制到本地数组。
“aesdf”会在可执行文件的整个生命周期中存在吗?
从抽象和形式的角度来看,每个字符串文字都是一个独立的无名对象,具有静态存储期限。这意味着,初始化char a[] = "aesdf"
正式创建文字对象"aesdf"
然后用它来初始化独立数组a
,即它不等于char *a = "aesdf"
,其中指针直接指向字符串文字。
然而,由于字符串文字是nameless对象,在char a[] = "aesdf"
变体没有办法访问独立的"aesdf"
初始化之前或之后的对象。这意味着您无法“检测”该对象是否确实存在。该对象的存在(或不存在)不会影响程序的可观察行为。因此,实现具有消除独立的所有自由。"aesdf"
对象并初始化a
数组以任何其他方式导致预期的正确结果,即char a[] = { 'a', 'e', 's', 'd', 'f', '\0' }
or as char a[] = { 'a', 'e', "sdf" }
或作为其他东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)