假设我有一个包含 100 个元素的数组。同一数组仅填充了 0 到 69 的元素,因为这是捕获的所有数据,而 70 到 99 都是零。
在传输数组中的数据之前,必须在开头添加消息开始,并且必须在收集数据后插入消息开始。
要插入数据,您可以使用 for 循环手动将数组元素向右移动 n(请参见下面的代码)。
uint8_t foo[100];
/*
* Some code that puts data in the first 70 elements
*/
//Need to insert the start of message
for(i=99; i>0; i--)
{
foo[i+1] = foo[i];
}
第一次运行该 for 循环时,它使 foo[100] = foo[99]。这是一个有效的操作还是 foo[100] 只是进入 never never land ?我知道在 MATLAB 这样的语言中,它会动态调整数组的大小,但是 C 也会做同样的事情吗?
最佳答案
C 没有边界检查,也不会自动调整数组大小。如果您有一个大小为 100 的数组,并且访问索引 100(因为数组从 0 开始),那么您将直接访问数组缓冲区之外的内存。
最好的情况,它会段错误。但是,由于行为未定义,您可能会覆盖其他变量或执行各种奇怪的操作。
关于c - 将数组元素移出数组范围时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498290/