库函数是已经定义和编译好的函数。
函数的返回值
通常,函数会将返回值复制到指定的存储单元或寄存器中。随后,调用程序会查看该内存单元。
函数原型
指出函数的参数类型,需在被调用之前声明,或在被调用前定义完整函数。
函数的参数
用于接收传递值的参数称为形参,传递给函数的值为实参。
c++使用参数表示实参,参量保存形参。
在函数中声明的变量是私有的局部变量,在函数结束时,占有的内存将被释放
函数参数中的数组
在将数组作为参数时,函数实际传递的是数组的首地址以及长度,这意味着函数将能直接访问原数组而非复制的数组,当数组中的内容不想被函数修改时,应在传值过程中使用const限定符,使其在函数中的值是常量。
二维数组**arr[3][4]**中,arr为指向指针的指针,对于二维数组有
arr[a][b] ==*( 星(arr+a)+b)
使用数组区间
可以用两个指针来传递数组,分别为数组的首部指针和数组的尾部指针的下一个指针。这在STL中被称为超尾。
const和指针
const类型的常量的地址只能赋给const类型的指针。
const int*p 使p指向的元素的值是不可修改的,但p本身和p指向的元素本身都是可以被修改的。
*int const p 使p本身指向的位置是不可以修改的。
函数参数和C风格字符串
在C风格字符串中,最后一位永远是/0,其ascii码为0,所以可以使用while语句循环读取每一个字符,直到语句结束时自动停止。
函数指针
函数的指针要与函数的返回类型和参数完全相同,如果有一个函数是:double ImSad(float reason);
则其对应的指针必须为:double ( * fucptr)(float) ;
此时,fucptr为指向函数的指针,若要为其赋值,则可以直接将函数名赋给指针,因为函数名就是函数在内存中的地址,即:fucptr=ImSad
在使用函数指针作为函数时,可以直接将其作为函数名使用,如:fucptr(32.5f) 也可以用另外一种形式 ( * fucptr)(32.5f)。
函数指针数组
在声明函数指针数组时,需要将数组的长度声明紧接着指针声明,如
double ( * fucptr[4])(float) ; 其中[] 的优先级要高于*,因此先与[]结合
auto&typedef
在很多时候声明指针可以用auto来代替。
tepedef用来为标识符设置别名,比如typedef long l 的意思是可以用l代替long,或将别名当做标识符声明,见P248