gpt4 book ai didi

c - 数组二类型定义解释

转载 作者:行者123 更新时间:2023-11-30 17:07:59 25 4
gpt4 key购买 nike

我有一个关于数组定义的问题。我尝试过两种类型的定义:

第一个定义

uint8_t data_i2c[1] = { 1 };

第二个定义

uint8_t data[1];
data[0] = 1;
data[1] = 2;

在第一种情况下,我有一个包含 1 个值的数组,如果我添加另一个值(例如 { 1, 2 }; ),则会出现编译错误。在第二种情况下,我以相同的方式定义了数组,但我第二次添加了值,如果我添加另一个值(例如 data[2] = 3; ),我不会出现编译错误。

Why this difference?

我还检查了调试,即使我定义了:

data[1] = 2;
data[2] = 3;

我只能看到 data[0] = 1;

我记得,如果我定义了我始终拥有的任何数组,并且可以使用索引 0 中的值。

我使用 Atmel Studio 作为编译器和 C 语言。

最佳答案

在第一种情况下使用初始化器。在编译时编译器计算出初始化列表中的元素大于数组大小,因此产生错误。

在第二个片段中,赋值是在运行时执行的,并且执行了数组越界写入。编译器知道如何知道您正在越界访问数组。

关于c - 数组二类型定义解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33915239/

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