如何确保C语言数组的赋值结果在循环外仍可正常读取?
问题分析与解决方法
核心问题
- 索引变量重复初始化:原代码中
int k = 0;放在for循环内部,每次循环都会把k重置为0,导致所有赋值操作都只修改array[0],其他数组元素始终是默认的0.0。 - 变量拼写错误:数组长度变量定义时写的是
array_lenght(少了字母h),但循环输出时用的是array_length,这会导致变量未定义,编译器可能生成错误或使用垃圾值,影响循环执行逻辑。
修正后的代码
// 声明指定大小的数组 double array[50]; // 使用sizeof计算数组长度,用int类型更合理 int array_length = sizeof(array) / sizeof(array[0]); printf("%d \n", array_length); // 声明区间长度与增量变量 double length; double deltaX; // 计算区间差值与采样增量 length = Dmax - Dmin; deltaX = length / 50; printf("Delta x = %lf \n", deltaX); double i; int k = 0; // 将索引变量移到循环外初始化 // 增加k的范围判断,避免数组越界 for(i = Dmin; i < Dmax && k < array_length; i+=deltaX) { array[k] = i; double y = A * cos(i/B) + C * sin(i) + D; printf("For a sample of %lf, the assigned function is %lf \n", array[k], y); k++; } printf("Elements of original array: \n"); for (int i = 0; i < array_length; i++) { printf("%lf ", array[i]); }
修改说明
- 把
k的声明移到循环外,让它在整个循环过程中持续自增,依次给数组的每个元素赋值。 - 修正数组长度变量的拼写错误,同时改用
int类型(数组元素个数是整数,用double类型没有意义)。 - 在循环条件中加入
k < array_length,防止索引超出数组范围,避免数组越界问题。
内容的提问来源于stack exchange,提问作者Szymon0202020
相关产品推荐
相关产品推荐

