[我正在学习C
语言的基础知识,但在通过Reference传递变量时遇到问题,这是我的代码:
int getd(int* p);
void main()
{
int x = 10;
getd(&x);
printf("%d\n",x);
}
int getd(int* p)
{
(*p) * 2;
}
> output: 10
为什么不打印x = 20?我的意思是我将指向变量x的指针加倍,为什么x的值仍为10?
您忘了添加=号。
(*p) *= 2;
您的原始行只是一个表达式,但不会进行任何修改。
OTOH。您的函数不返回任何内容,因此应将其声明为void
C语言允许编写没有L值的表达式。其中有些功能(例如,对printf
的调用)具有副作用,即使它的结果只是被丢弃,它也很有用,但是即使该表达式没有副作用,在C语言中也允许它具有仅用于评估表达式的代码,例如您的。
有时编译器可以在编译时对其进行求值,有时它会检测到求值操作不会改变程序的行为,并且会将整个表达式都移离目标代码。
(*p) * 2;
的意思是>
p
所指向的内容此处不更新值。
似乎您应该使用*p = (*p) * 2;
而不是(*p) * 2;
。