将指针传递给函数不会返回值

时间:2012-02-09 14:31:14

标签: c++ pointers

在下面的例子中,我得到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 个答案:

答案 0 :(得分:6)

没有!

*NumRecPrinted = no_of_records;

参见“*”表示“价值”和“&amp;”指“地址”。您想要更改NumRecPrinted的“值”,这就是上述工作原因。你做的是给NumRecPrinted“num_of_records的地址。”

答案 1 :(得分:6)

您正在为指针分配地址,而不是指向指针的值。试试这样吧

int demo (int *NumRecPrinted)
{
     int no_of_records = 11;
     *NumRecPrinted = no_of_records; 
} 

答案 2 :(得分:2)

您所做的就是将 local pointer-to-int NumRecPrinted指向demo函数内的新整数。

您想要更改它指向的整数,而不是更改指向的位置。

*NumRecPrinted = no_of_records;

您可以在您的版本中查看您正在获取本地变量的地址,并且您知道它不是您关心的变量的地址,而是它的值。

答案 3 :(得分:1)

正如其他人所指出的那样,* =和&amp;的值。 =的地址。所以你只是为方法内的指针分配一个新地址。你应该:

*NumRecPrinted = no_of_records; 

请参阅Pointers上的这篇优秀教程。 E.g:

  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

答案 4 :(得分:0)

你想要的     * NumRecPrinted = no_of_records;

这意味着,“将NumRecPrinted点数设置为等于no_of_records”。