首页 > 解决方案 > 在 C 和 C# 中处理数组

问题描述

我试图在数组中插入一个元素,但由于数组索引超出范围而失败

我在 C# 中试过它失败了它在 c 中工作正常

int[] LA = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;   
n = n + 1;
while( j >= k) 
{
    LA[j+1] = LA[j];
    j = j - 1;
}
LA[k] = item;

但它适用于c

int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;
n = n + 1;
while( j >= k) {
    printf("j+1 =%d",j+1);
    LA[j+1] = LA[j];
    j = j - 1;
}

有人可以解释这是为什么吗?其他语言会不断变化吗?谢谢。

许多答案说它在c中不起作用所以我上传了一张图片 ![在此处输入图像描述] 1

标签: c#c

解决方案


哦,不,这不起作用,看起来非常明显的越界写作,因此你得到了未定义的行为。您不能在 C 中动态增长数组,它们在“创建”点是静态大小的。

请注意,C 并没有说做未定义的事情会导致任何特定的可测量结果[*],所以它看起来可以做预期的事情,但仍然完全被破坏

[*]:这就是“未定义”的意思:没有定义会发生什么。有些人似乎将其解释为“我们将获得错误处理程序来触发他们称之为‘未定义行为’的东西”,但事实并非如此。任何事情都可能发生,任何事情。


推荐阅读