1、复习函数
C++对返回值有一定限制:不能是数组,但可以是其他任何类型,甚至是结构和对象!
void cheers(int ); void cheers(int x);其中变量是可选的
2、函数参数和按值传递
int sum_arr(int arr[],int n); sum_arr(cookies,ArSize);
这里是将arr作为一个指针进行传递的,但在函数其余部分它将作为一个数组,可直接使用arr[i]; 函数原型中应该定义arr为int*类型,但在C++中int arr[]等价于int *,当在函数头或者函数原型中,而在别处却不行。
arr[i]==*(ai+i) //values
&arr[i]==ai+i //addresses
3、函数和数组
int age=39;
const int *pt=&age; // *pt始终不变,age 可变
int *const finger=& age; //finger只指向age,但允许*finger进行修改age的值。
const int month[2]={21,34};
禁止将常量数组的地址赋给非常量指针意味着不能将数组名作为参数传递给使用非常量形参的函数:
int sum(int arr[],int n);
int j=sum(months,12); //not allowed
4、函数和二维数组
int sum(int ar2[][4], int size);一个指向ar2是一个指向4个int的指针
也可以arc[r][c]=*(*(ar2+r)+c)
char *strchr(char *s,int c); //在字符串s中返回指向c后的字符的指针
5、函数和C-风格字符串
char *pt=new char[n+1];
pt[n]=' ';
6、函数和结构
与数组名不同,机构名只是结构的名称,要获得结构的地址,必须使用地址运算符&
在函数传递时可以整个结构一起传,也可以只传递结构的地址,只传递结构的地址将节省时间和空间!注意形参变为指针,要用->
8、函数与array对象
10、函数指针
函数地址是存储其机器语言代码的内存的开始地址。
函数申明:double pam(int);
指针类型申明: double (*pf) (int) //就是将函数名换成指针名
注意函数传递的是函数地址还是函数的返回值
process(think); //passes address of think() to process()
thought(think()); //passes return value of think() to thought()
double (*pf)(int) //pf是一个指向函数的指针
double *pf (int) // pf()是一个返回指针的函数
pf =pam //pam 是一个函数名
在调用时可以:
pam(4)等价于pf(4)或者(*pf)(4)
*pf(4)或者 *(*pf)(4)将可以显示出存储在这些地址处的实际值
auto 只能用于单值初始化
pa与&pa 区别:
1、pa是指数组的第一个元素的地址,&pa是指整个数组的地址
2、pa+1为数组中的下一个元素地址,而&pa+1是指数组pa后面一个12字节的内存块的地址
3、要得到第一个元素的值,要对pa解除一次引用,要对&pa解除两次引用。 **&pa==*pa==pa[0]