- 函数和数组
- 函数和结构
- 函数和指针
- 函数和string
- 函数递归
函数定义:
typename functionnname(parameterlist){
statements;
return value;
}
函数原型:如果函数定义在函数调用之后,必须在函数调用前进行函数原型声明,函数原型描述了函数到编译器的接口,将函数返回值类型、参数类型和数量告诉编译器。 函数原型是一条语句,就是函数定义中的函数头,此外,在原型的参数中不要求提供变量名,有类型列表就足够了。
函数参数和按值传递:
函数和数组:
1、输入为数组:
定义:
int sum_array (int array[],int n)
实际情况是array是一个指针,在函数内部,array可以看成是数组
调用:
sum_array(cooke,4) 其中cooke是数组名
2、使用指针处理数组:
数组名==指针
定义:
int sum_array (int* array,int n)
调用:
sum_array(cooke,4) 其中cooke是数组名
3、使用 输入为数组区间的函数:
int sum_array (const int* start,const int* end )
调用:
sum_array(cooke,cooke+3) 其中cooke是数组名
指针和const:
将const用于指针有很微妙的地方,第一种方法是让指针指向一个常量对象,这样可以防止该指针来修改所指向的值,第二种方法是将指针本身声明为常量,防止改变指针指向的位置。
但pt的声明并不意味着它指向的值实际上就是一个常量,而只意味着队医pt来说,是一个常量,因此可以通过修改age来 改变age值。
注意:c++禁止将const地址付给非const的指针,除非使用强制准换。
函数和二维数组:
定义函数: 注意这个[4]中的数字必不可少
int sum_array (int array[][4],int n)
调用:
sum_array (cooke,4)
or
定义:array是一个由4个指向int的指针组成的数组
int sum_array (int (*array)[4],int n)
函数和c风格字符串
表示字符串方法有三种:
char数组 、用括号引起的字符串常量、被设置为字符串的地址的char指针。
字符串作为参数来传递,实际传递的是字符串的第一个字符的地址,因此,需要在函数中将表示字符串的形参声明为char * 类型
int 函数名(const char * str,char ch)
函数返回c风格字符串的函数
在函数内部 声明一个字符串指针 : char * x = char [n+1],然后return x
函数和结构:
定义结构:
struct tracal{
int x;
char y;
}
声明函数原型:
tracal sum(tracal x)
也可以传递结构的地址:
tracal sum(tracal *x)
函数和string 对象 array对象
函数递归:
函数指针:
函数也有地址,可以通过指针获取到函数的地址,也可以通过函数指针调用函数
- 获取函数的地址:获取 函数地址很简单 ,只要 使用函数名(不加参数即可),例如think()是一个函数名,那么函数地址就是think。
如果要将函数作为参数进行传递,必须是传递函数名;
- 声明函数指针:
对于函数:double pam(int)
声明一个函数指针:
double (*pf) (int)
和函数声明类似,不过是将函数名改为指针(加括号),
(*pf) (int)意味着是一个 指向函数的指针
- 使用函数指针调用函数
double (*pf) (int) 定义之后
令: pf = pam(函数名)
调用:x=(*pf)(5)
typeof 别名