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 是获取这个变量的指针
单纯的一个记录给自己看的帖子
网友评论