传递二维数组时出现问题
Issue in Passing a 2-D array
我阅读了如何在函数中将二维数组作为参数传递,并尝试实现相同的方法。我遇到了两个问题:
1(代码输出的第一行包含垃圾值。 2( 这条线((arr + in( + j(实际上做了什么?我的意思是,为什么我们不能做类似((arr + i( + j( 来访问 arr[i][j] ?
我还尝试使用参数 int **arr 传递矩阵,然后尝试将值打印为 arr[i][j],但没有输出。
这是我得到的输出:-
Enter number of nodes: 4
0167772161878012032-1
0000
0000
0000
这是我的代码:-
#include <iostream>
using namespace std;
void show(int* arr, int n)
{
int i, j;
for(i = 0; i < n; ++i)
{
for(j = 0; j < n; ++j)
{
cout << *((arr + i*n) + j);
}
cout << endl;
}
}
int main()
{
int n, i, j;
cout << "Enter number of nodes: ";
cin >> n;
int arr[n][n] = {{0}}; //Will initialize all elements in the matrix with 0.
show((int*)arr, n);
}
这里最大的问题是你使用的是C而不是C++。
为了避免人们喘不过气来开始宗教或政治讨论,让我们把它归结为:
VLA(可变长度数组(不允许在C++中使用。
此外,切勿将原始指针用于拥有的内存,也不应使用平特算术。
然后是主要话题:
传递二维数组时出现问题
用于传递数组以运行函数的语法是错误的。在C++数组可以通过引用或指针传递。请看:
void function1(int(&m)[3][4]) // For passing array by reference
{}
void function2(int(*m)[3][4]) // For passing array by pointer
{}
int main()
{
int matrix[3][4]; // Define 2 dimensional array
function1(matrix); // Call by reference
function2(&matrix); // Call via pointer
return 0;
}
当然,我们可以使用指针进行各种肮脏的设计。即使接受指针也会衰减。但我们不应该这样做。
可变长度数组不是标准的C++功能。
不过,您还是向函数传递了一个指向二维数组第一个元素的指针。
二维数组的每个"行"都有 n 个元素。因此,如果你有一个指向第一行的第一个元素的指针,那么要获得指向第二行的第一个元素的指针,你必须写
arr + n
如果你想得到指向二维数组第 i 行的第一个指针,你必须写
arr + i * n
要获取指向行中元素的指针,您必须编写
( arr + i * n ) + j
这与
arr + i ( n + j
要获取指针指向的元素,您必须取消引用指针
*( arr + i * n + j )
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 按列打印二维数组时出现问题
- 二维数组问题
- 用变量作为C++中二维数组的维数的问题
- 关于C++中的二维数组,我的解决方案有什么问题
- c++二维数组算术问题
- c++中二维数组中引用传递的问题
- C++(Allegro Library)位图二维数组问题
- c++二维数组问题