1.调用需要输入数组的函数时,实际上没有把数组内容进行调用,而是将数组位置,种类数目提交给了函数,这意味着在函数中对数组进行操作,就是对原数组进行操作。这与传递常规变量不同,传递常规变量是拷贝。
防止函数修改数字,在声明形参时使用关键字const,意味着可以用该值,但不能修改,即只读数据。
2.函数原型可以省略变量名
3.指针和const
①指针指向常量对象:
int a=1;
const int * p=&a;//p指向const int
不能用指针p来修改值,但是a不是常量,可以用a来修改值
const int a=1;//const量
const int * p=&a;//p指向const int
不能用指针p来修改值,也不能用a来修改值。可以将新地址赋给p,但是新地址的值依旧不允许修改。
注意:不能将const地址赋给常规指针,意味着不能将数组名传递给使用非常量形参的函数
②
const int a=1;//const量
int * const p=&a;//固定指针,p只能指向a,但是允许通过p修改a
4.函数和二维数组
将二维数组作为函数的参数
int sum(int arr[][4],int size);//函数声明
int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
int total=sum(a,3);
首先函数参数不能为数组,所以必然是地址,a数组是二维的,三个含有四个int值的数组。arr是指针不是数组,该指针规定了列数。
5.函数和结构
结构将其数据组合成单个实体,该实体被视为一个整体。故可以按基本类型那样处理结构,但会引发一个问题:如果结构非常大,复制结构会导致降低速度。结构比较小时,按值传递最合理
要传递结构的地址而不是整个结构以节省空间和时间,需要重新编写前面的函数,使用指向结构的指针。需要修改三个地方
①调用函数时将结构地址传递给它
②形参声明为指针,使用const修饰符
③由于形参是指针,所以用间接成员运算符(->)而不是成员运算符(.)
6.对于函数返回值类型不能是数组,其他都行,甚至是结构,所以可以将数组作为结构返回。
7.函数参数为形参而非实参,所以函数里的变量名就算和main函数内的变量名一样,也不是同样的东西。