赋值与传函数参数:

  • 普通变量,char、int、double之类的,直接赋值;

a = b;

变量b中的值就会复制到变量a中,a中的值和b中的值相等。

  • 地址变量的赋值,本质上和普通变量一样,需要注意的是:复制的是地址值,而非地址指向的值。

p1 = p2;

  • 如果想要针对地址指向的值做操作,就需要解引用:(地址也可以理解为句柄,用句柄可以抓住另一个具体的数据。)

*p1 = *p2;

  • 数组变量,比较特殊,数组名是地址,所以,不能直接用赋值语句来复制整个数组。作为函数参数时,就是传地址,复制一份地址值。
  • 结构体变量,可以当作普通变量看待,可以直接赋值。作为函数参数时,就是传值,复制一份结构体的值(内容)。

函数返回

  • void 函数,没有返回值,函数体内也不需要return语句。
  • 函数返回普通类型,程序运行中,会把该类型的值,如a+b,返回给主调函数,以函数调用的方式表达,如add(a, b)。注意该值并不位于被调函数的stack frame中,因此,主调函数可见。
  • 函数返回地址类型,此时需要特别注意的是:该地址指向的内存区域必须是主调函数可见的,即或者是主调函数中变量的地址、或者是动态分配的heap中内存地址,而绝不能是被调函数的局部变量的地址。

指针的句柄作用

动态分配的内存单元的首地址,必须赋值给某个指针(地址)变量。指针可以抓住该内存单元,即通过该指针来访问该内存单元。这就是指针的句柄作用。否则,所分配的内存单元就会消失,内存单元物理存在,但是程序中已经不可见了。

You have no rights to post comments