鱼C论坛

 找回密码
 立即注册
查看: 630|回复: 2

请问为什么数组之间会相互影响

[复制链接]
发表于 2024-10-1 23:35:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         double r[10];
  5.         double p[10];
  6.         double q[10];
  7.         r[0] = 0.994000000;
  8.         p[0] = q[0] = 1;
  9.         p[1] = 0.497 , q[1] = 0.497;
  10.         int i = 0;
  11.         while(i<=9){
  12.                 r[i+1] = r[i] / 2.0;
  13.                 i++;
  14.         }
  15.         for(i=0;i<=8;i++){
  16.                 q[i+2] = q[i+1]*2.5 - q[i];
  17.         }
  18.         for(i=0;i<=8;i++){
  19.                 p[i+2] = p[i+1]*1.5 - p[i];
  20.         }
  21.         int n = 0;
  22.         for(n=0;n<=10;n++){
  23.                 printf("%.10f\t\n",r[n]);
  24.         }
  25.         return 0;
  26. }
复制代码


输出结果r[0]会变成1.2883.....
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         double r[10];
  5.         double p[10];
  6.         double q[10];
  7.         r[0] = 0.994000000;
  8.         p[0] = q[0] = 1;
  9.         p[1] = 0.497 , q[1] = 0.497;
  10.         int i = 0;
  11.         while(i<=9){
  12.                 r[i+1] = r[i] / 2.0;
  13.                 i++;
  14.         }
  15.         for(i=0;i<=8;i++){
  16.                 q[i+2] = q[i+1]*2.5 - q[i];
  17.         }
  18.         int n = 0;
  19.         for(n=0;n<=10;n++){
  20.                 printf("%.10f\t\n",r[n]);
  21.         }
  22.         return 0;
  23. }
复制代码

这样r[0]又变成0.994000000
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-10-1 23:35:25 | 显示全部楼层
鱼油,您好!

数组之间相互影响的原因通常是因为在程序中不小心超出了数组的边界,导致数组的内存区域重叠或覆盖。另外,根据您提供的代码片段,有两点需要澄清:

1. 您提供的片段并没有数组的定义。如果您是在别的地方定义了数组,请确保数组访问没有超出边界。
2. `p = 0.497, q = 0.497;` 这不是标准的 C 代码,这里用逗号分隔会导致只能执行第一个赋值,并且对整体代码没有什么影响。

如下是您的代码修正后的版本,假如您是要定义出两个 double 类型的变量 `p` 和 `q`:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     double r;
  5.     double p;
  6.     double q;
  7.     r = 0.994000000;
  8.     p = q = 1;
  9.     p = 0.497;
  10.     q = 0.497;
  11.     int i = 0;
  12.     while(i) {
  13.         // 假设您在这里有一些操作
  14.     }
  15.     return 0;
  16. }
复制代码


**小提示:** 如果你遇到数组相互影响的问题,可以检查一下数组的定义和访问,确保没有越界访问。同时,使用调试工具或增加打印语句帮助定位问题原因。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-1 23:52:06 | 显示全部楼层
本帖最后由 jackz007 于 2024-10-2 09:59 编辑
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         double r[10];               // r 为可容纳 10 个浮点数的一维数组
  5.         double p[10];               // p 为可容纳 10 个浮点数的一维数组
  6.         double q[10];               // q 为可容纳 10 个浮点数的一维数组
  7.         . . . . . .
  8.         for(n=0;n<=10;n++){         // 这个循环会循环 11 次,最后那次会访问到 r[10]
  9.                                     // r 有效的索引范围为 r[0]~r[9],r[10] 显然已经
  10.                                     // 越界,从而导致意外访问到 main() 的其它局部变量,
  11.                                     // 具体是哪一个并不确定,取决于所使用的编译器。
  12.                 printf("%.10f\t\n",r[n]);
  13.         }
  14.         return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表