微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这段代码不起作用?它显示 0

如何解决为什么这段代码不起作用?它显示 0

每当我编译时,它都会显示 0 而不是 11。这段代码有什么问题?我使用了一个函数添加。我注意到这在我使用数组字符串时有效。

#include <stdio.h>

#include <stdlib.h>

void add(int result,int a,int b);

int main(void) {
    int num1 = 5;
    int num2 = 6;
    int result1 = 0;
    add(result1,num1,num2);

 printf("%d",result1);

 return 0;
}

 void add(int result,int b) {
  result = a + b;
  }

解决方法

C 函数的参数是传递内容的副本,因此在 callee 中修改它们不会影响在 caller 中传递的内容。

要让函数修改传递的东西,你应该将指针传递给应该修改的东西。

#include <stdio.h>

void add(int *result,int a,int b); /* add * to make result a pointer */

int main(void) {
  int num1 = 5;
  int num2 = 6;
  int result1 = 0;
  add(&result1,num1,num2); /* add & to pass a pointer */

  printf("%d",result1);

  return 0;
}

void add(int *result,int b) { /* add * to make result a pointer */
  *result = a + b; /* add * to dereference the pointer */
}
,

因为方法add内部执行的操作所做的更改在外部不可见。您传递的参数是 pass by value

传值

Pass by Value,意味着数据的副本是通过方式制作和存储的 参数的名称。 对参数的任何更改都没有 影响调用函数中的数据。

要使这些更改对外部可见,您可以传递 result 变量的内存引用( pass-by-reference

引用传递

一个引用参数“引用”到调用中的原始数据 功能。 因此对参数所做的任何更改也是对 原始变量。

例如:

void add(int *result,int b) {
  *result = a + b;
}

并在 main 中调用 ,如下所示:

add(&result1,num2);

或返回操作结果如下:

int add(int a,int b) {
  return a + b;
}

并在 main 中调用它,如下所示:

result1 = add(num1,num2);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。