Передача указателей на функцию не возвращает значение - PullRequest
3 голосов
/ 09 февраля 2012

В следующем случае я получаю NumRecPrinted = 0, то есть num равно 0

int main()
{
    int demo(int *NumRecPrinted);
    int num = 0;
    demo(&num);
    cout << "NumRecPrinted=" << num;    <<<< Prints 0
    return 0;
}

int demo (int *NumRecPrinted)

{
    int no_of_records = 11;
    NumRecPrinted = &no_of_records;
}

Ответы [ 5 ]

6 голосов
/ 09 февраля 2012

Вы назначаете адрес указателю, а не значение указателю.Попробуйте это вместо этого

int demo (int *NumRecPrinted)
{
     int no_of_records = 11;
     *NumRecPrinted = no_of_records; 
} 
6 голосов
/ 09 февраля 2012

Нет!

*NumRecPrinted = no_of_records;

См. «*» Означает «значение», а «&» означает «адрес». Вы хотите изменить «значение» NumRecPrinted, поэтому вышесказанное работает. Что вы сделали, так это дали NumRecPrinted «адрес» num_of_records.

2 голосов
/ 09 февраля 2012

Все, что вы сделали, это указали локальный указатель на int NumRecPrinted на новое целое число внутри функции demo.

Вы хотите изменить целое число, на которое оно указывает, не меняйте, куда он указывает.

*NumRecPrinted = no_of_records;

Вы можете увидеть в своей версии, что вы берете адрес локальной переменной, и вы знаете, что это не адреста переменная, о которой вы заботитесь, но ее значение.

1 голос
/ 09 февраля 2012

Как уже отмечали другие, * = значение и & = адрес.Итак, вы просто назначали новый адрес указателю внутри метода.Вы должны:

*NumRecPrinted = no_of_records; 

См. Этот прекрасный учебник на Указатели .Например:

  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 = address of firstvalue
  p2 = &secondvalue; // p2 = address of secondvalue
  *p1 = 10;          // value pointed by p1 = 10
  *p2 = *p1;         // value pointed by p2 = value pointed by p1
  p1 = p2;           // p1 = p2 (value of pointer is copied)
  *p1 = 20;          // value pointed by p1 = 20
0 голосов
/ 09 февраля 2012

Вы хотите * NumRecPrinted = no_of_records;

Это означает, что «установите, на что указывает NumRecPrinted, равное no_of_records».

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