赋值与传函数参数:
- 普通变量,char、int、double之类的,直接赋值;
a = b;
变量b中的值就会复制到变量a中,a中的值和b中的值相等。
- 地址变量的赋值,本质上和普通变量一样,需要注意的是:复制的是地址值,而非地址指向的值。
p1 = p2;
- 如果想要针对地址指向的值做操作,就需要解引用:(地址也可以理解为句柄,用句柄可以抓住另一个具体的数据。)
*p1 = *p2;
- 数组变量,比较特殊,数组名是地址,所以,不能直接用赋值语句来复制整个数组。作为函数参数时,就是传地址,复制一份地址值。
- 结构体变量,可以当作普通变量看待,可以直接赋值。作为函数参数时,就是传值,复制一份结构体的值(内容)。
函数返回
- void 函数,没有返回值,函数体内也不需要return语句。
- 函数返回普通类型,程序运行中,会把该类型的值,如
a+b
,返回给主调函数,以函数调用的方式表达,如add(a, b)
。注意该值并不位于被调函数的stack frame中,因此,主调函数可见。 - 函数返回地址类型,此时需要特别注意的是:该地址指向的内存区域必须是主调函数可见的,即或者是主调函数中变量的地址、或者是动态分配的heap中内存地址,而绝不能是被调函数的局部变量的地址。
指针的句柄作用
动态分配的内存单元的首地址,必须赋值给某个指针(地址)变量。指针可以抓住该内存单元,即通过该指针来访问该内存单元。这就是指针的句柄作用。否则,所分配的内存单元就会消失,内存单元物理存在,但是程序中已经不可见了。