【发布时间】:2018-09-22 06:31:51
【问题描述】:
在这个question 中,cmets 中说:
char arr[10] = { 'H', 'e', 'l', 'l', 'o', '\0'};和char arr[10] = "Hello";是完全一样的。 ——迈克尔·沃尔兹
这让我开始思考。
我知道"Hello" 是字符串文字。字符串文字以静态存储持续时间存储并且是不可变的。
但如果两者确实相同,那么char arr[10] = { 'H', 'e', 'l', 'l', 'o', '\0'}; 也会创建一个类似的字符串文字。
char b[10]= {72, 101, 108, 108, 111, 0}; 是否也创建具有静态存储持续时间的“字符串”文字?因为理论上是一样的。
char a = 'a';和char a; ...; a = 'a';是一回事,所以你的想法是正确的'a'只是写给a
之间有区别吗:
char a = 'a';char a = {'a'};
如何/在哪里定义差异?
编辑: 我发现我没有说得足够清楚,以至于我对文字的内存使用/存储持续时间特别感兴趣。我将保持原样保留问题,但希望在此编辑中更清楚地说明问题的重点。
【问题讨论】:
-
关于
b的初始化,如果系统使用ASCII,那么是的,也是一样的。 -
@Someprogrammerdude 这是否意味着任何数组初始值设定项都将以静态持续时间存储?
-
@KamiKaze 之间有区别吗:char a = 'a';字符 a = {'a'};差异是如何/在哪里定义的? 实际上你不需要关心。在初始化期间,数组初始化器的内容被复制到数组中,无论如何都无法访问数组初始化器的原始数据。
-
@MichaelWalz 我很在意,因为我想了解它的工作原理以及内存使用情况(考虑到这并不是真正的问题)。
-
@KamiKaze this 可能适合你。
标签: c arrays string-literals