0

I'm new to c++, I'm trying to find main diagonal matrix using pointer array like

int * ProblemSolution :: solution(int *A,int N)
{
    //write your code here
    for (int m=0;m<N;m++){
        for (int x=0;x<N;x++){
            if(m=x)
                cout<<*(*(A+m)+x)<<",";
        }
    }
    return 0;

}

but i'm getting some kind of error: enter image description here

can anyone help me?

4

4 回答 4

1

你有几个问题

if(m=x)

是一个任务,你可能想要, if(m==x)

方括号语法比指针算术清晰得多,

A[m]

代替,

*(A+m)

也是*(A+m)一个整数,所以*(A+m)+x也是一个不能取消引用的整数。

你的索引应该是这样的: A[m*N+x]

于 2020-04-02T10:39:46.527 回答
1

*(*(A+m) + x)是一个int,所以尝试将它存储在某个变量中然后打印它。您还将 2D 矩阵(指向指针的指针)与 1D 数组(指针)混合在一起。尝试做像-

*(A+m)=A[m] ,

*(*(A+m)+x) =A[m][x]
于 2020-04-03T04:58:03.910 回答
1
  • A是一个int*
  • A+m也是一个int*
  • *(A+m)是一个int
  • (*(A+m) + x)也是一个int

而不是cout<<*(*(A+m)+x)<<",";你可以写int tmp = (*(A+m)+x); cout << *tmp << ",";.

您正在尝试取消对指针的引用。


为了使事情更容易,您应该使用适当的类型(例如std::array, std::vector)而不是使用原始指针。

于 2020-04-02T10:41:05.517 回答
0

您将指针表示的二维矩阵和指针表示的一维数组混合在一起,您的情况是后者。

*(*(A+m)+x) 仅当 A 是指向数组的指针衰减为指向指针的指针时才是合法的,而应该是*(A + N*m +x)

于 2020-04-02T10:46:40.163 回答