C语言 函数传参的理解

C语言有点东西 不像JAVA 不需要复杂考虑参数传递问题

java就两种参数传递方式 值传递AND引用传递(类似指针)

java: 8种基本数据类型全是值传递 其他数据类型都是引用传递

有一个特例String 虽然说是引用传递 但是效果却和值传递类似

为什么要纠结这个问题

//定义了一个函数
void add(int x,int y,int z){
        x = y + z;
}

int a = 1;
int b = 2;
int c = 3;

System.out.println(a);
add(a,b,c);
System.out.println(a);


//运行结果
1
1

我们预期是想让a变成5,但是实际程序运行后a的值还是没有改变。这个就是值传递 函数内的x并不是外部的a

由于java并没有真的的指针就不写修复的方法了 其实也没必要...

重点来了 C是有指针的 我们要修复这个问题

//换一种定义
void add(int *x,int *y,int *z)
{
        *x = (*y) + (*z);
}

int a = 1;
int b = 2;
int c = 3;

printf(a);
add(&a,&b,&c);
printf(a);


//运行结果
1
5

int *x 是定义一个int指针

(*y) 是这个指针的指向的内存 //括号无实际意义只是为了更好的理解这个是一个值了,不是指针了

*x = 1+2 是修改这个指针 指向的内存 里面的值

&a 是获取这个变量的指针

单纯的一个记录给自己看的帖子

你可能感兴趣的:(C语言 函数传参的理解)