c# - 在 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 并没有说做未定义的事情会导致任何特定的可测量结果[*],所以它看起来可以做预期的事情,但仍然完全被破坏。
[*]:这就是“未定义”的意思:没有定义会发生什么。有些人似乎将其解释为“我们将获得错误处理程序来触发他们称之为‘未定义行为’的东西”,但事实并非如此。任何事情都可能发生,任何事情。
推荐阅读
- python - 如何通过对 (r,c) 数据帧的每个元素执行函数来创建 (r,c,n) 数组?(Python)
- python - 如何在 x 值大小而不是计数之后在 pandas barplot 中排列条形图
- node.js - 如何自动获取每小时的mongodb记录?
- python - 如何按名称选择多个不相邻的列并结合几种切片方法?
- ruby-on-rails - 添加验证以防止 ActiveRecord::Type::Integer 超出范围,限制为 4
- c# - BizTalk 业务流程中的日期时间格式
- google-analytics - 为什么谷歌优化不通过谷歌分析“要求”加载?
- android - 使用 MediaPlayer 在 Xamarin 的主要活动中播放音频不起作用
- c# - 减小 gif 图像大小 imagemagic c#
- c# - 在 Android 上隐藏 TabbedPage 所选项目的标签或调整标签文本大小