改变C中变量的值

Ama*_*d27 1 c pointers

为什么应该更改主变量的值不是变量的副本。

我有一个方法

int plusInt(int x){
 return ++x; 
}
Run Code Online (Sandbox Code Playgroud)

调用此函数时,将创建一个新的堆栈帧,其中包含x 的副本不是原始变量。那么这会改变该副本的价值吗?

问:如果我想更改原始变量的值,我可以使用指向它的指针,然后增加一个值,对吗?例如:

int plusIntPointer(int *x){
 return ++*x; 
}
Run Code Online (Sandbox Code Playgroud)

但是有什么用/为什么有人想要更改原始变量的值而不是副本?

Mar*_*evi 5

那么这会改变该副本的价值吗?

确切地说,因为该函数只有副本,而不是原始变量作为局部变量。

如果我想更改原始变量的值,我使用指向它的指针,然后增加一个值,对吗?

又对了。使用指针的原因是将变量的地址传递给函数。

但是有什么用/为什么有人想要更改原始变量的值而不是副本?

原因是,在函数结束并返回到调用函数后,对副本的任何更改都将丢失。

例如,假设您想要使用一个函数来交换两个变量的值。然后,您必须更改原始值。你的函数应该是这样的:

void swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = *temp;
}
Run Code Online (Sandbox Code Playgroud)

你应该这样称呼它:

swap(&a, &b);
Run Code Online (Sandbox Code Playgroud)

这样,即使您返回到调用函数,更改也将保留。 如果您只是更改副本,那么当您返回调用函数时,变量将不会交换值!