Somnnus 发表于 2024-10-1 23:35:15

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

#include <stdio.h>

int main()
{
        double r;
        double p;
        double q;
        r = 0.994000000;
        p = q = 1;
        p = 0.497 , q = 0.497;
        int i = 0;
        while(i<=9){
                r = r / 2.0;
                i++;
        }
        for(i=0;i<=8;i++){
                q = q*2.5 - q;
        }
        for(i=0;i<=8;i++){
                p = p*1.5 - p;
        }
        int n = 0;
        for(n=0;n<=10;n++){
                printf("%.10f\t\n",r);
        }
        return 0;
}

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

int main()
{
        double r;
        double p;
        double q;
        r = 0.994000000;
        p = q = 1;
        p = 0.497 , q = 0.497;
        int i = 0;
        while(i<=9){
                r = r / 2.0;
                i++;
        }
        for(i=0;i<=8;i++){
                q = q*2.5 - q;
        }
        int n = 0;
        for(n=0;n<=10;n++){
                printf("%.10f\t\n",r);
        }
        return 0;
}
这样r又变成0.994000000

FishC 发表于 2024-10-1 23:35:25

鱼油,您好!

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

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

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

#include <stdio.h>

int main()
{
    double r;
    double p;
    double q;
    r = 0.994000000;
    p = q = 1;
    p = 0.497;
    q = 0.497;
    int i = 0;
    while(i) {
      // 假设您在这里有一些操作
    }
    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-10-1 23:52:06

本帖最后由 jackz007 于 2024-10-2 09:59 编辑

#include <stdio.h>

int main()
{
      double r;               // r 为可容纳 10 个浮点数的一维数组
      double p;               // p 为可容纳 10 个浮点数的一维数组
      double q;               // q 为可容纳 10 个浮点数的一维数组
      . . . . . .
      for(n=0;n<=10;n++){         // 这个循环会循环 11 次,最后那次会访问到 r
                                    // r 有效的索引范围为 r~r,r 显然已经
                                    // 越界,从而导致意外访问到 main() 的其它局部变量,
                                    // 具体是哪一个并不确定,取决于所使用的编译器。
                printf("%.10f\t\n",r);
      }
      return 0;
}
页: [1]
查看完整版本: 请问为什么数组之间会相互影响