【发布时间】:2016-06-24 10:26:40
【问题描述】:
以下是来自 www.tutorialspoint.com 的代码,我在这里学习算法和数据结构的基础知识。本教程代码给出了一个 ex。对数组的插入操作。
#include <stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
n = n + 1;
while( j >= k){
LA[j+1] = LA[j];
j = j - 1;
}
LA[k] = item;
printf("The array elements after insertion :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}
我理解它在给定 k 值作为数组索引添加新项目的代码。并且在编译和运行时运行良好,没有任何错误。让我困惑的是 while 循环中 LA[j+1] = LA[j] 行的逻辑。
我的理解是在 c 中你必须声明数组的大小。但在前。代码 int LA[] = {1,3,5,7,8}; 括号 [ ] 为空。所以我不确定它是固定大小还是可以将更多元素添加到数组中。
现在j 被赋予n 的值,即5(数组长度)。数组声明有5个元素,数组索引为0到4。
(在while循环的第一次迭代中)所以LA[j + 1]是LA[5 + 1]是LA[6]。现在数组只有 5 个索引为 0 到 4 的元素。所以根据我的说法,即使在假设可以将更多元素添加到数组之后,它如何将 LA[j] 的值分配给 LA[j + 1]。它说 LA[6] = LA[5] 但索引 5 处没有任何内容,因为最后一个索引是 4。
我曾尝试在 google 上搜索,但除了代码或部分代码外,我不确定要搜索什么。而且用代码搜索也没有用。
请帮助我理解。谢谢。
【问题讨论】:
-
当您不理解某些代码时,您可以随时尝试使用调试器单步执行它 - 这有助于使逻辑更加清晰。
-
www.tutorialspoint.com 是否真的将其作为良好代码的示例,还是您应该修复的非常糟糕的代码示例?如果提供此代码作为好代码示例,我建议另找地方学习
c。 -
我正在学习算法和数据结构。他们提供的代码运行并确实向数组中添加了一个元素。我已经编译并运行了代码及其工作。我还不知道如何调试 c 代码。将谷歌并尝试
-
它只对@JVLJewels 有效。此代码调用未定义的行为。确保您阅读了答案并接受了答案。
标签: c arrays algorithm initialization