【发布时间】:2014-12-11 01:01:31
【问题描述】:
我在创建指向多维列表的指针时遇到问题。在单个数组的情况下 - 输出应该是没有问题的。在多维数组的情况下 - 生成错误消息。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int ROWS = 3, COLS = 4;
int list[ROWS][COLS] = { {4, -3, 5, 6}, {5, 1, 7, 2},{-4,6,10,-8}};
int list2[] = {3, 6, 9, 2};
int *plist = list;
int *plist2 = list2;
for (int row = 0; row < ROWS; row++)
{
for (int col = 0; col < COLS; col++)
cout << setw(4) << list[row][col] << " ";
cout << endl;
}
cout << *plist << endl;
cout << *plist2 << endl;
return 0;
}
main.cpp:11:14:错误:初始化时无法将“int ()[4]”转换为“int”
int *plist = 列表;
【问题讨论】:
-
这段代码中没有任何指向数组的指针。只有
int的一维和二维数组以及指向int的指针。一维数组衰减为int *,因此可以分配给plist。二维数组衰减为指向数组的指针 (int (*)[COLS]),这与int *不兼容。你可以改写int *plist = list[0];或int *plist = &list[0][0];。 -
int *plist = list;行根本没有意义,您的编译器正在尽其所能告诉您。list是一个 int 数组的数组,因此它衰减为指向第一个元素的指针,即指向 int 数组的指针,而不是指向 int 的指针。像午夜一样平淡。 -
更好:
for (auto const & row : list) { for (int v : row) { std::cout << v << ' '; } std::cout << '\n'; } -
当您想引用数组(一维)中的变量时,您指定指针并将其设置为等于数组名称 - 说这是该数组开始指向的内存位置。我想对二维数组做同样的事情。从这里开始/指向这里。就是这样。
-
@YelizavetaYR 然后选择
int (*plist)[COLS] = list;。
标签: c++ arrays multidimensional-array