Может ли кто-нибудь рассказать мне об этой простой функции и почему она так себя ведет (указатели, C ++) - PullRequest
0 голосов
/ 05 марта 2020

У меня есть 2 фрагмента кода, я пытаюсь передать указатель в функцию, которая работает для меня, однако, когда я разыменую указатель, установите значение 10000, а затем приращение не получит желаемого результата.

undesired output, where does the 4 come from!

#include<iostream>


 void ReturnArray(int *matrix);

 int array;



int main() {

ReturnArray(&array);


return(0);
}


void ReturnArray(int *matrix) {

int x{ 0 };

for (x=0; x < 10; ++x){


*matrix = 10000;
++matrix;


std::cout << *matrix << "\n";
}

 }

Однако, когда я увеличиваю адрес указателя, затем устанавливаю значение 10000, выходной результат соответствует ожидаемому.

Desired output

#include<iostream>


void ReturnArray(int *matrix);

int array;



int main() {

ReturnArray(&array);


return(0);
}


void ReturnArray(int *matrix) {

int x{ 0 };

for (x=0; x < 10; ++x){


    ++matrix;
    *matrix = 10000;



std::cout << *matrix << "\n";
}

}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

array - это одно целое число, вы пытаетесь использовать его как массив из 10 элементов, это неопределенное поведение. Возможен любой результат.

Измените array на массив:

int array[10];

Чтобы ваш код печатал правильные значения, которые вам нужно увеличивать после печати:

for (x=0; x < 10; ++x) {
  *matrix = 10000;
  std::cout << *matrix << "\n";
  ++matrix;
}
0 голосов
/ 05 марта 2020

хорошо, так что понял, я устанавливаю значение после deref, затем меняю адрес, чтобы при вызове cout ничего не инициализировалось на этом новом адресе ...

I угадайте мой следующий вопрос ... откуда 4? это данные мусора или есть причина, по которой это не 0?

спасибо за помощь в понимании.

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