函数
c语言(面向对象)实现某个功能
函数定义: 返回值类型 函数名(形参表)
{
函数体;
}
函数调用:函数名(参数表:实参表)
实参表:必须和形参表类型,个数,顺序一样
实参:可以是常量,变量以及表达式
函数调用过程
1.给形参分配临时内存,把实参的值传给形参
2.进入被调函数的函数体,按照语法规则依次执行
3.如果函数有返回值通过return把返回值带回主调函数,同时形参(栈区)内存回收
函数调用的使用
1.函数调用作为一条独立的语句
2.函数调用作为表达式的一部分(函数表达式),该函数必须有返回值
3.函数调用作为另外一个函数的实参,该函数必须有返回值
**
指针和数组
**
在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针
string nums[]={"one","two","three"};
string *p=&nums[0];//p指向nums的第一个元素
string *p2=nums;//等价于p2=&nums[0]
使用auto变量的初始值时,推断得到的类型是指针,而非数组`
int a[]={0,1,2}
auto ia2(a);//ia2是一个整型指针,指向a的第一个元素
ia2=42;//错误,ia2是一个指针,不能用int值给指针赋值
指针也是迭代器
允许使用递增运算符将指向数组元素的指针向前移动到下一个位置
int a[]={0,1,2,3}
int *p=a;//p指向a的第一个元素
++p;//p指向a[1]
指针遍历数组中元素
int arr[]={0,1,2,3,4,5,6,7,8,9}
int *e=&arr[10];//定义一个指针e指向arr尾元素的下一个位置的指针
for(int *b=arr;b!=e;++b)
cout<<*b<<endl;//输出arr的元素
标准库函数begin和end
int *a=begin(arr);//指向arr首元素的指针
int *b=end(arr);//指向arr尾元素的下一位置的指针
两个函数定义在interator中
尾后指针不能执行解引用和递增操
给一个指针加上某整数值,结果仍然是指针
int arr[]={1,2,3,4,5}
int *pi=arr;
int *pi2=ip+4;//ip2指向a[4]
int *p =arr+5;//p指向arr尾元素的下一个位置,使用警告:不要解引用
int *p=arr+10;//错误 arr只有5个元素,p2的值未被定义
下标和指针
对数组执行下标运算其实是对指向数组元素的指针执行下标运算
int i=ia[2];//ia转换成指向数组首元素指针,ia[2]得到(ia+2)所指的元素
int *p=ia;//p指向ia的首元素
i=*(p+2);//等价于i=ia[2]
只要指针指向的是数组中的元素(或尾元素的下一个位置),都可以执行下标运算
int *p=&ia[2];//p指向索引为2的元素
int j=p[1];//p[1]等价于*(p+1),即ia[3]表示元素
int k=p[-2];//p[-2]即为ia[0]表示的元素
指针和多维数组
当使用多维数组的名字时,也会自动将其转换成数组首元素指针
int ia[3][4];
int(*p)[4]=ia;//p指向含有4个整数的数组
p=&ia[2];//p指向ia的尾元素