我正在玩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()中打印数组的值,或者是否可以这样做。任何帮助表示赞赏。
答案 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 ;;