如何解决为什么这段代码不起作用?它显示 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 举报,一经查实,本站将立刻删除。