我是C语言的新手,下面的代码是我的问题:
我编写它来更改传递的变量的值,但是在输出中发生了异常。
这是我的代码:
#inlcude <stdio.h>
void change(int i, int j) {
i = i + j;
}
int main() {
int a = 50;
printf("a before = %d\n", a);
change(a, 10);
printf("a after = %d\n", a);
return 0;
}
此错误的原因是什么?
最佳答案
这是C语言中非常简单的情况。
在C语言中,它使用一种称为Call-By-Value的方法来评估函数参数。
这意味着当您使用参数调用函数时,被调用函数将接收那些参数的值,而不是参数。
在此程序中,函数“change”将接收整数50(值“a”保持)和10而不是a和10。因此,当您调用函数时,i为50,j为10。在函数中,我更改为60。但是a保持不变。如果添加printf()以在“change”中打印i的值,则可以看到发生了更改。
因此,要使“更改”生效,必须使用C语言中的特殊“工具”指针。
您必须按以下方式更改“更改”功能:
void change(int *pi, int *pj)
{
*pi += *pj;
}
您也应该更改通话。int main()
{
int a = 50, b = 10;
/* printf line */
change(&a, &b);
/* printf line */
}
在功能“更改”中这意味着pi,pj是
int
的指针。 pi
和pj
是用于保存变量地址的变量。*pi
和*pj
是pi
和pj
具有的地址中的变量。这意味着
*pi
指向(指向)a
,*pj
指向b
您会看到我已经改变了“改变”的方式
就是现在
和号(&)给出变量的地址
因此&a和&b是a&b的地址,该地址应存放在pi和pj中
我认为这个冗长的答案会对您有所帮助。但是,您应该阅读一些有关指针的 class 。
关于c - 为什么调用此功能没有效果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33518683/