访问一个数组

时间:2010-09-17 14:43:58

标签: c++

我声明一个全局数组,然后在if语句中分配值。但是当我在另一个if语句中使用该数组时,该数组具有不同于我先前分配的值。 例如:

int arr[5];
xyz(bool p,bool q)
{
    if(p)
    {
        for(int i=0;i<5;i++)
        {
            arr[i]=rand()%100;
        }
    }

    if(q)
    {
        for(i=0;i<5;i++)
        printf("%d",arr[i]);
    }
}

任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

好吧,如果p != q,那么当您输入第二个条件时,您在第一个条件中对arr所做的任何更改都不会被打印。如果arr从未初始化,那么它几乎不会具有您期望的值。

编辑:根据您的评论,尝试使用std::vector<int>代替C风格的整数数组,如:

#include <vector>
std::vector<int> arr(5);  // was int arr[5]

还有一些建议:

  • 在可行的情况下(几乎,但并非总是如此),您应该在C ++中使用标准容器。它们往往比C风格的数组更好。
  • 使用全局变量有时会导致比他们解决的问题更多的问题。建议您将arr作为局部变量,并在需要时将其作为参数传递。这有助于查看代码的人知道它需要什么以及它访问什么,而无需实际挖掘代码来查看所有内容。在你不知道的情况下,有可能(甚至可能)其他东西正在改变arr。如果你总是传递参数并且不使用全局变量,这将有助于你发现它被改变的位置。

所以,结合这些,我建议做类似的事情:

#include <vector>
#include <iostream>

xyz(std::vector<int>& arr, bool p, bool q)
{
    std::vector<int>::iterator ai;
    if(p)
    {
        for(ai = arr.begin(); ai != arr.end(); ++ai)
        {
            *ai = rand() % 100;
        }
    }

    if(q) 
    {
        for(ai = arr.begin(); ai != arr.end(); ++ai)
        {
            std::cout << *ai << std::endl;
        }
    }                    
}

int main()
{
    std::vector<int> arr(5);
    xyz(arr, true, false);
    xyz(arr, false, true);
    return 0;
}

答案 1 :(得分:0)

尝试将您的第一个代码块调整为更像这样的代码:

if (p) {
    int temp;
    for (int i=0; i<5; i++) {
        temp = rand() % 100;
        printf("%i: %d\n", i, temp);
        arr[i] = temp;
    }
}

现在,您将在将随机值写入数组之前获得列表。将此列表与稍后从阵列中读取它们时得到的结果进行比较。

更新:我在键盘上运行了the above modification to your code,而且我两次都看到了完全相同的值。

答案 2 :(得分:0)

我甚至不知道为什么你要添加那些'bool'变量,因为你没有创建从不运行它! 所以只需使用此代码[与beta的版本相同];

int temp;

for (int i=0; i<5; i++) {
    temp = rand() % 100;
    cout << i << temp << endl; 
    arr[i] = temp;
}