【问题标题】:why my program is showing this compilation error?为什么我的程序显示此编译错误?
【发布时间】:2020-08-21 10:03:29
【问题描述】:

我正在学习 c++ 并且刚刚达到指针,并且在阅读了关于我开始练习它之后 我被困在多维数组和指针上。我被困的问题是我的程序没有打印第二个数组元素它也给出了一些错误我试图找到解决方案但找不到我的共享图片程序你可以看看它的链接如下

enter image description here

谢谢

【问题讨论】:

  • ptrarr 是指向 int 的指针,*ptrarrint**ptrarr 没有意义,为什么要取消引用两次?
  • 我访问了很多网站,它向我展示了同样的东西。请告诉如何解决它
  • 请编辑您的问题,删除您的代码图像并将您的代码作为文本粘贴到您的问题中。
  • 等我也照做

标签: c++ arrays pointers multidimensional-array


【解决方案1】:

这是你的代码

#include <iostream>

using namespace std;

int main()
{
    int arr[2][3];
    arr[0][0]=1;
    arr[0][1]=8;
    arr[0][2] = 4;
    arr[1][0]=3;
    arr[1][1] = 6;
    arr[1][2] = 54;
    int* ptrarr=&arr[0][0];
    
    cout<<*(*(ptrarr+1)+1);

    return 0;
}

实际上,您所做的是将ptrarr 分配给arr[0][0] 的地址。在cout 语句中,ptrarr 将地址递增到arr[0][1],然后引用它(输出该地址的值),即8 (arr[0][1]=8),然后,您再次取消引用它,这意味着没有任何意义,因为您有一个值现在而不是地址。

这可以解决你的错误

#include <iostream>

using namespace std;

int main()
{
    int arr[2][3];
    arr[0][0]=1;
    arr[0][1]=8;
    arr[0][2] = 4;
    arr[1][0]=3;
    arr[1][1] = 6;
    arr[1][2] = 54;
    int* ptrarr=&arr[0][0];
    
    cout<<*(ptrarr+ (rowNumber*COL) + colNumber));

    return 0;
}

其中rownumbercolnumber 是您要访问的位置,COL 是总列数。在您的情况下,它是3

所以如果你想输出arr[1][2],你会这样做

cout<<*(ptr+(1*3)+2);

【讨论】:

  • 先生,但我想要第二个数组的值
  • 您实际期望的输出是什么?
  • 我期望的输出是 54
  • 我现在已经编辑了答案。它现在可以工作了。获取输出为54,cout&lt;&lt;*(ptrarr+(1*3)+2),因为它位于 arr[1][2]
  • 你能解释一下这是什么意思吗?它会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2019-08-30
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多