gpt4 book ai didi

c - 在 C 中初始化字符串和数组 - 区别

转载 作者:太空狗 更新时间:2023-10-29 15:16:35 25 4
gpt4 key购买 nike

我正在试验用 C 语言初始化数组和字符串的方法,发现:

char *str = "ABCDE";

完美地初始化字符串,没有错误或警告,但是:

int *array = {1,2,3,4,5};

给我警告并最终转储核心。现在这真的让我很烦恼,我想知道为什么这种声明适用于字符但不适用于整数......

编辑:我正在使用 gcc 编译器。

最佳答案

这样做对整数有效:

int array[] = {1,2,3,4,5};

或者这个:

int *array = (int[]){1,2,3,4,5};

"string" 告诉编译器它需要的所有信息(大小、类型)来实例化字符串(也就是带有 NULL 终止符的字节数组)。除非您将其声明为 compound literal,否则裸{} 不会.添加 ints[] 告诉编译器初始数据是一个整数数组。

正如 Nathan 在评论中指出的,这两种说法存在细微差别。

首先,在堆栈上定义一个包含 5 个整数的数组。该数组可以修改并一直存在到函数结束。

第二个,1) 在堆栈上定义一个包含五个整数的匿名数组 2) 在堆栈上定义一个指向匿名数组第一个元素的指针“array”。由于内存在堆栈上,因此不应返回指针。此外,数组本身并不像字符串文字那样是 const。

编辑:如评论员所指出的那样,用复合文字替换了 cast。

关于c - 在 C 中初始化字符串和数组 - 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546751/

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