c语言关于使用函数操作变量但是无效的问题


问题描述

用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

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - c语言关于使用函数操作变量但是无效的问题


欢迎来到我的小屋