问题描述
用c练习开发的过程中,简化了一些代码,结果发现原本能够运行的代码发生了失效的情况。
示例:
#include <STDIO.H>
#include <STDLIB.H>
void test(int a){
a += 1;
}
int main(int argc, char *argv[]){
int b=1;
test(b);
printf("my test test result : %d\n",b);
}输出结果:
> my test test result : 1问题原因
C 语言中的函数参数是按值传递的,所以 test 函数中的 a 和 a 实际上是主函数中对应变量b的副本。因此,对它们的修改不会影响主函数中的原始变量。
解决思路
采用指针开辟空间,通过操作内存的实际值的方法操作数据
示例:
#include <STDIO.H>
#include <STDLIB.H>
void test(int* a){
*a += 1;
}
int main(int argc, char *argv[]){
int* b=(int*)malloc(sizeof(int));
*b = 1;
test(b);
printf("my test test result : %d\n",*b);
free(b);
return 0;
}输出结果:
> my test test result : 2 

Comments | NOTHING