为啥我的程序显示此编译错误?

Posted

技术标签:

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

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

enter image description here

谢谢

【问题讨论】:

ptrarr 是指向 int 的指针,*ptrarrint**ptrarr 没有意义,为什么要取消引用两次? 我访问了很多网站,它向我展示了同样的东西。请告诉如何解决它 请编辑您的问题,删除您的代码图像并将您的代码作为文本粘贴到您的问题中。 等我也照做 【参考方案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] 你能解释一下这是什么意思吗?它会有所帮助

以上是关于为啥我的程序显示此编译错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在反编译我的应用程序时出现错误?

当我想修改指向常量整数的指针时,为啥我的编译器不显示错误?

为啥在尝试调用采用动态参数的基本构造函数/方法时会出现此编译错误?

为啥我的visual stdio 2010连错误程序也能编译成功。。。。

为啥编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误?

为啥在尝试定义函数体时会出现此编译器错误?