在C ++中动态分配的数组

时间:2014-07-12 05:12:21

标签: c++ dynamic-arrays

我正在玩c ++动态分配数组。我有这个代码

#include <iosteam>
using namespace std;

void A(int* arr)
{
    for(int i = 0; i < 10; i++)
        cout << arr[i] << endl;
}

int main()
{
    int **nums;
    nums = new int*[10];
    for(int i = 0; i < 10; i++)
        nums[i] = new int(i);

    for(int i = 0; i < 10; i++)
        cout << *nums[i] << endl;

    cout << endl;
    A(*nums);
    return 0;
}

这给了我输出

0
1
2
3
4
5
6
7
8
9

0
0
0
0
0
0
33
0
1
0

我的问题是:当数组传递给函数A(int * arr)时,为什么打印的数组的输出与main()中定义的数组不同?我一直在研究动态分配和双指针,但我似乎无法想出这个。我搜索了SO问题,找不到合适的答案。我想知道我是否可以在函数A()中打印数组的值,或者是否可以这样做。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

你的职能:

void A(int* arr)
{
    for(int i = 0; i < 10; i++)
        cout << arr[i] << endl;
}

正在使用A(*nums)进行调用。

您正在有效地执行:

for(int i = 0; i < 10; i++)
        cout << (*nums)[i] << endl;

相当于:

for(int i = 0; i < 10; i++)
        cout << nums[0][i] << endl;

您正在查看未定义行为的影响,因为您正在访问未经授权的内存。

请记住,您只能访问

num[0][0]
num[1][0]

....

num[9][0]

而不是

num[0][0]
num[0][1]

....

num[0][9]

答案 1 :(得分:2)

上面的答案非常正确,您可以按照以下方式修改代码。

void A(int** arr)

{

    for(int i = 0; i < 10; i++)
       // cout << *arr[i] << endl; or bellow
        cout <<arr[i][0]<<endl;
}

在你的主要参考&#34; A(nums)&#34 ;;