C++指针和2d数组输出
C++ Pointer and 2d array outputting
我是C++的新手,仍然对2d数组如何使用指针感到困惑。如果我有这个(以示例格式):
int* anarray = anarrayfiller();
for (int a=0;a<10;a++) {
for (int b=0;b<10;b++) {
cout<<(char)anarray[a][b]; //Here's the error mentioned below
}
cout<<"n";
}
//Later, outside main
int* anarrayfiller() {
int anarray[10][10];
//Populated here
return &anarray;
}
这在cout<lt;行:"表达式必须具有指向对象类型的指针"我只想检查一下如何在2d数组中搜索,我发现了以下内容:指向2d数组的指针这表明,实际上这个指针指向数组[0]中的int数组,如果是这样的话,我肯定在返回指针方面遗漏了一些东西——那么我不是必须返回一个指向2d指针数组的指针,每个指针都指向数组中的特定int吗?我很困惑。指针如何使用2d数组?
这里有一些错误:
-
返回一个指向局部变量的指针。函数返回后,该变量先前占用的堆栈区域不再存在,或者被下一个函数使用。
-
您返回一个指向整数的指针,而您有一个二维数组。最接近的是指针对指针。
-
您可以访问单指针,就好像它是双指针一样(指向指针的指针或指向数组或数组的指针),但事实并非如此。这就是你在指向线处出现错误的原因。
-
但是不能使用指针对指针,因为数组(二维数组)的内存布局与指针对指针不同。例如,请参阅我的这个旧答案来解释原因。
这可以通过在堆上动态创建数组来最容易地解决,作为指向指针的指针:
int **anarrayfiller()
{
int **anarray = malloc(sizeof(int *) * 10);
for (int i = 0; i < 10; ++i)
{
anarray[i] = malloc(sizeof(int) * 10);
/* Populate here */
}
return anarray;
}
当您将问题标记为C++时,实际上应该避免纯数组或指针,而选择std::vector
(如果需要动态添加)或std::array
(如果有固定的编译时大小):
std::array<std::array<int, 10>, 10> anarrayfiller()
{
std::array<std::array<int, 10>, 10> anarray;
// Populate arrays
return anarray;
}
相关文章:
- 将值从二维数组输出到文本文件
- 为什么我的数组输出一个不在其中的元素
- 长度为 20 的 Cout'ing 数组输出 23 个字符
- 将矢量数组输出到 tex 文件中,错误
- 来自不同位置的数组输出的执行时间
- 数组输出中缺少字符
- 字符数组输出 - C++
- C 合并的数组输出错误
- 制作垫子类型对象的数组.输出窗口显示同一帧
- C++数组输出地址
- 字符数组输出正确,但实际上没有存储正确的值
- 字符串数组输出
- 为什么在将字符数组输出到控制台时会得到垃圾值
- 字符数组输出额外的字符
- 从字符数组输出到控制台
- 为什么计数从字符数组输出错误的字符
- 动态初始化的 2D 数组输出错误
- C++指针和2d数组输出
- c++中奇怪的char数组输出
- 类函数中的c++字符数组输出