为什么通过引用传递在c中不起作用?

问题描述 投票:0回答:2

[我正在学习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?

c pointers
2个回答
2
投票

您忘了添加=号。

(*p) *= 2;

您的原始行只是一个表达式,但不会进行任何修改。

OTOH。您的函数不返回任何内容,因此应将其声明为void

C语言允许编写没有L值的表达式。其中有些功能(例如,对printf的调用)具有副作用,即使它的结果只是被丢弃,它也很有用,但是即使该表达式没有副作用,在C语言中也允许它具有仅用于评估表达式的代码,例如您的。

有时编译器可以在编译时对其进行求值,有时它会检测到求值操作不会改变程序的行为,并且会将整个表达式都移离目标代码。


1
投票

(*p) * 2;的意思是>

  1. 阅读p所指向的内容
  2. 乘以2
  3. 此处不更新值。

似乎您应该使用*p = (*p) * 2;而不是(*p) * 2;

© www.soinside.com 2019 - 2024. All rights reserved.