将数组元素移出数组范围会发生什么?

时间:2019-08-14 16:01:56

标签: c embedded

说我有一个包含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]只是进入永不落地?我知道在像MATLAB这样的语言中,它将动态调整数组的大小,但是C是否做同样的事情?

1 个答案:

答案 0 :(得分:0)

C没有边界检查,它不会自动调整数组大小。如果您有一个大小为100的数组,并且访问了索引100(因为数组从0开始),那么您将直接在数组缓冲区之外访问内存。

最佳情况,它会隔离故障。但是,由于行为是不确定的,因此您可能会覆盖其他变量或做各种奇怪的事情。