我是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的指针。 pipj是用于保存变量地址的变量。*pi*pjpipj具有的地址中的变量。
这意味着*pi指向(指向)a*pj指向b
您会看到我已经改变了“改变”的方式
就是现在

和号(&)给出变量的地址
因此&a和&b是a&b的地址,该地址应存放在pi和pj中
我认为这个冗长的答案会对您有所帮助。但是,您应该阅读一些有关指针的 class 。

关于c - 为什么调用此功能没有效果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33518683/

10-11 11:14