gpt4 book ai didi

c - 使用全局变量作为函数的参数

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:05 25 4
gpt4 key购买 nike

那么如果我使用全局变量作为函数的参数,函数是否能够更改全局变量的值?

如果我定义了一个全局变量,并且我使用一个函数来改变该变量的值,那么该变量的新值会在函数返回后保留吗?

最佳答案

So If I use global variables as the arguments of a function, would the function be able to change the value of the global variable?

不,您将无法更改用作函数参数参数的全局变量。函数参数获取全局变量的副本。它本身(参数)是函数的局部变量。局部变量的任何更改都不会影响原始参数,因为该函数处理全局变量值的副本。

And If i defined a global variable, and I used a function to alter the value of that variable, would the new value of that variable stay after the function returns?

如果函数直接或通过指向用作函数参数的全局变量的指针间接处理全局变量,则函数可以更改全局变量的值。

考虑以下演示程序

#include <stdio.h>

int x = 10;

void f(int x)
{
x = 20;
}

void g(int *px)
{
*px = 30;
}

void h()
{
x = 40;
}

int main(void)
{
printf("Before calling f( x ) - x = %d\n", x);
f(x);
printf("After calling f( x ) - x = %d\n\n", x);

printf("Before calling g( &x ) - x = %d\n", x);
g(&x);
printf("After calling g( &x ) - x = %d\n\n", x);

printf("Before calling h() - x = %d\n", x);
h();
printf("After calling h() - x = %d\n\n", x);

return 0;
}

它的输出是

Before calling f( x ) - x = 10
After calling f( x ) - x = 10

Before calling g( &x ) - x = 10
After calling g( &x ) - x = 30

Before calling h() - x = 30
After calling h() - x = 40

另一个有趣的案例

考虑以下代码片段

int x = 10;

void h( int value )
{
x += value;
}

//...

h( x++ );

这里有一个函数参数求值后的序列点。因此,在函数内部,全局变量的值为 11,因此您将在该语句之后得到该值

x += value;

x 将等于 21

关于c - 使用全局变量作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com