第02周07--类C语言有关操作补充2_哔哩哔哩_bilibili
对传值方式的解读:
每一个函数相当与一个独立的房间,传入的参数其实相当于放入了一个新的独立的变量当中。
所以说传入数值的时候不会改变传入的ab,用大白话讲就是说,传入就是把自己复制给相应位置的形参当中!也就是说在函数形式参数其实是你传入参数的一个复制品而不是正主!!!
传地址其实同理,只不过传入的是地址,当用*去除地址的值的时候我们所操作的是真真实实的a与b而不再是a与b的复制品了!(传地址,改地址所指的内容)
这样下来这种传地址方式大家也应该比较好理解。
它传递并改变的是什么?传的是地址(就是把地址复制给相应的形式参数ps:复制件跟原件除了数值相同已经毫无关系了),但变的也是地址。(传地址改地址)等于啥也没传。
#include <stdio.h>
#include <stdlib.h>
void swap(float *a, float *b)
{
float *t;
t = a;
a = b;
b = t;
}
int main(){
float a,b,*p1,*p2;
a = 1.2;
b = 3.6;
p1 = &a;
p2 = &b;
printf("a=%f,b=%f\n",a,b);
printf("p1=%d,p2=%d\n",p1,p2);
swap(p1,p2);
printf("p1=%d,p2=%d\n",p1,p2);
printf("*p1=%f,*p2=%f\n",*p1,*p2);
printf("a=%f,b=%f",a,b);
}
为了方便大家理解可以运行一下这个程序。
可以发现大家都是一样的。
下面引用参数就是相当于在不同房间里不创造复制品,请原主过来的意思。所以它能直接实现值的修改。ps:除了引用方式其他的方式全都创建了复制品。