Dhe*_*.S. 4 c c++ arrays initialization
以下是初始化char数组的两种方法:
char charArray1[] = "foo";
char charArray2[] = {'f','o','o','\0'};
Run Code Online (Sandbox Code Playgroud)
如果两者都是等价的,那么人们会期望每个人都使用上面的第一个选项(因为它需要更少的击键次数).但是我已经看到了代码,作者总是使用第二种方法.
我的猜测是,在第一种情况下,字符串"foo"存储在数据段中并在运行时复制到数组中,而在第二种情况下,字符存储在代码段中并在运行时复制到数组中.由于某种原因,作者对数据段中的任何内容过敏.
编辑:假设数组声明为函数的本地.
问题:我的推理是否正确?这是你喜欢的风格,为什么?
另一种可能性呢:
char charArray3[] = {102, 111, 111, 0};
Run Code Online (Sandbox Code Playgroud)
你不应该忘记C char类型是一个数字类型,它恰好发生的值通常用作char代码.但是如果我使用一个数组来处理与文本无关的东西,我肯定会更喜欢用上面的语法初始化它,而不是将它编码成字母并将它们放在引号之间.
如果您不想要终端0,您还必须使用第二个表格或在C中使用:
char charArray3[3] = "foo";
Run Code Online (Sandbox Code Playgroud)
这是一个几乎没有人知道的C功能,但是如果编译器在初始化charArray时没有足够的空间来保存最终的0,那么它不会放置它,但代码是合法的.但是应该避免这种情况,因为此功能已从C++中删除,并且C++编译器会产生错误.
我检查了gcc生成的汇编代码,所有不同的形式都是等价的.唯一的区别是它使用.string或.byte伪指令来声明数据.但这只是一个可读性问题,并没有对结果程序产生一些影响.