在下面的例子中,我得到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;
}
答案 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”。