C语言调用自定义函数修改参数后打印结果与预期不符问题咨询
问题原因
- C语言中普通基础类型的参数传递默认是值传递,函数形参是实参的独立副本,修改形参不会影响原实参的值。
- 你在
fun函数中操作的i、j是调用时从main函数拷贝过来的临时变量,仅在fun函数的作用域内有效,fun执行结束后这些临时变量就会被销毁,完全不会修改main中原有i、j的值,因此最终输出还是初始的5 2。
修复方案
如果要通过函数修改外部变量的值,需要传递变量的内存地址(即使用指针作为形参),示例代码如下:
#include <stdio.h> void fun ( int*, int* ) ; int main( ) { int i = 5, j = 2 ; fun ( &i, &j ) ; // 传入变量的地址 printf ( "%d %d\n", i, j ) ; return 0 ; } void fun ( int *i, int *j ) { *i = (*i) * (*i) ; // 操作地址指向的原变量 *j = (*j) * (*j) ; }
修改后运行即可输出你预期的25 4。
内容的提问来源于stack exchange,提问作者Sumit Kumar Jha
相关产品推荐
相关产品推荐

