gpt4 book ai didi

c++ - 在 C 中初始化一个 char 数组。哪种方式更好?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:32 25 4
gpt4 key购买 nike

以下是初始化char数组的两种方式:

char charArray1[] = "foo";
char charArray2[] = {'f','o','o','\0'};

如果两者等同,人们会希望每个人都使用上面的第一个选项(因为它需要更少的击键)。但是我看到过作者总是不厌其烦地使用第二种方法的代码。

我的猜测是,在第一种情况下,字符串“foo”存储在数据段中,并在运行时复制到数组中,而在第二种情况中,字符存储在代码段中,并在运行时复制到数组中.出于某种原因,作者对数据段中的任何内容都过敏。

编辑:假设数组声明为局部函数。

问题:我的推理是否正确?您喜欢哪种风格?为什么?

最佳答案

另一种可能性呢:

char charArray3[] = {102, 111, 111, 0};

你不应该忘记 C 的 char 类型是一个数字类型,它恰好值经常被用作 char 代码。但是,如果我将数组用于与文本完全无关的内容,我肯定更愿意使用上述语法对其进行初始化,而不是将其编码为字母并将它们放在引号之间。

如果您不想要终端 0,您还必须使用第二种形式或在 C 中使用:

char charArray3[3] = "foo";

这是一个几乎没有人知道的 C 特性,但如果编译器在初始化 charArray 时没有足够的空间来容纳最后的 0,它不会放置它,但代码是合法的。但是,应该避免这种情况,因为此功能已从 C++ 中删除,并且 C++ 编译器会产生错误。

我查看了gcc生成的汇编代码,不同的形式都是等价的。唯一的区别是它使用 .string 或 .byte 伪指令来声明数据。但这只是一个可读性问题,不会对生成的程序产生任何影响。

关于c++ - 在 C 中初始化一个 char 数组。哪种方式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3487174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com