Нахождение основной диагональной матрицы с использованием массива указателей - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в c ++, я пытаюсь найти основную диагональную матрицу, используя массив указателей, например

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;

}

, но получаю какую-то ошибку: enter image description here

кто-нибудь может мне помочь?

Ответы [ 4 ]

1 голос
/ 03 апреля 2020

*(*(A+m) + x) - это int, поэтому попробуйте сохранить его в некоторой переменной, а затем распечатать. Также вы смешиваете 2D матрицу (указатель на указатель) с 1D массивом (указатель). попробуйте сделать как -

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

*(*(A+m)+x) =A[m][x]
1 голос
/ 02 апреля 2020
  • 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) вместо использования необработанных указателей.

1 голос
/ 02 апреля 2020

У вас есть несколько проблем

if(m=x)

- это назначение, которое вы, вероятно, захотите, если (m == x)

Синтаксис в квадратных скобках намного яснее, чем арифметика указателей c,

A[m]

вместо

*(A+m)

Также *(A+m) является целым числом, поэтому *(A+m)+x также является целым числом, которое вы не можете разыскивать.

Ваш индекс должен выглядеть примерно так: A [m * N + x]

0 голосов
/ 02 апреля 2020

Вы перепутали 2D матрицу, представленную указателем на указатель, и 1D массив, представленный указателем, ваш случай является последним.

*(*(A+m)+x) допустимо, только если A - указатель на массив, распавшийся на указатель на указатель вместо этого должен быть *(A + N*m +x)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...