为什么是 int array[][20]
Why int array[][20]?
ReadVector()
为什么我必须写int a[][20]
? [20]
的目的是什么. 为什么我不能写a[][]
?
int a[20][20 ], n,m;
int ReadVector(int a[][20],int n,int m){
for (int i=0; i<n; i++)
for (int j=0; j<m; j++){
cout<<"a["<<i<<","<<j<<"]=";
cin>>a[i][j];
}
return *a[20];`
当你通过a[i]
访问行时,必须知道第二个维度,以获得正确的内存地址,因为
&(a[i]) = &(a[0]) + i*m*sizeof(int)
因此,当您访问元素时,偏移量通过以下方式计算:
&(a[i][j]) = &(a[0]) + i*m*sizeof(int) + j
试想一下,如果只允许你计算从第一个元素开始的元素,你将如何在矩阵中的位置[i][j]
找到一个元素......要完成这项工作,您必须至少知道连续有多少个元素。
为什么我写不
a[][]
?
因为int a[][]
与int **a
(指向char
的指针(相同,这与int a[][20]
与int (*a)[20]
(指向char[20]
的指针(不同。
将相同的指针算法应用于int **a
会导致与int (*a)[20]
不同的结果。
相关文章:
- 如何从map<pair<string,int>,pair<string,Array>>中迭代和查找?
- 如何将 int[4] 转换为 std::array<int,4>?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何就地构造 std::map<int, std::array<Class, 2>>?
- 如何从方法返回静态常量 int std::array?
- 尝试使用 const int std::array 时出错
- Visual Studio 不采用 array: int magicSquare[n][n]?
- 混淆从"array of int[]"到"pointer to int"的显式衰减?
- 为什么我们不能将 int array[] 传递给 hoo(int* &p)?
- "Converting" 从 int[] 到 std::array at fread?
- Int Array[]打印不好
- 从 int 转换为 std::array<unsigned char, 1ul>::value_type 可能会改变其值
- 无法将 std::array 转换为 int?
- 错误:'const std::array<int, 3u>&'不是类、结构或联合类型
- 为什么 std::array<int, 10> x 不是零初始化,而是 std::array<int, 10> x = std::array<int, 10>()
- 未定义模板 'std::__1::array<int, 3>' 的隐式实例化
- "初始化":无法从"Array<int,3>"转换为"int"
- 带有参数的 func return list (int arry[int]<int>, int array[int])
- std::array<int, 10> 作为类成员是否初始化为零?