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

问题描述

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

enter image description here

谢谢

解决方法

这是您的代码

#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);