C++primer学习笔记(四)——Chapter 6
6.1 Function Basics
一、函数的构造
type functionName( parameters list)
statement
1、首先格式如上,一个函数一定要有返回值的类型type,函数名functionName,还有括号内的参数列表,以及主要的函数的内容。
2、返回值:
(1)就是return,首先,return的值一般要和返回值类型相同,否则就转换成返回值类型,但是如果没有转换的方法就会出错。
(2)return的作用主要是两个,一个就是结束函数,回到调用的地方,另外一个就是然会一个值。
(3)返回值类型可以是void,那么return就只有结束函数的作用了~
3、参数列表
(1)一个参数一定要跟着一个类型,不可以有例外。
(2)参数的名字不可以相同,函数内的名字也不可以和参数列表内的相同
4、调用
切记调用的时候使用的参数类型要与参数列表一一对应。
二、Local Object
1、local variables:
这个很好理解,就是定义的变量,如果在{}内,那它的作用域就只在这个{}的范围内。
2、全局变量
就是在函数外定义的,那么,这个变量就可以在它定义之后的任何一处代码中使用
3、Local static objects
这种变量不会随着{}的结束而结束,它存在于整个程序的生命周期,然后这种变量的定义和初始化语句只执行一次。
6.2 Argument Passing
一、传参数的方法
重点就是传参数的2种方法
void func(int i) { }
1、就是这种简单的方法。此种方法是通过复制一遍的方法来创建一个新的参数i。注意点就是
(1)不能通过改变i来改变原有的值。
(2)在对大的类或者参数进行拷贝的时候是很浪费时间的。
(3)对于指针的复制,因为同样指向同一个对象,所以可以通过指针来改变他的值。
void func2(int &i) { }
2、通过这样引用的方法,就会将i和传入的变量绑定在一起,可以直接改变他的值。
PS:一般用引用的方法来替代copy,然后应该如果为了防止不小心被改变,则应该加上const就OK。
二、Array Parameters
主要有2种方法引用,一种是指针,另一种是引用
1、指针的三种用法(确定长度)
(1)
void print(const char *cp) {
if(cp) //就是判断是否是空指针
……
}
PS:
const char *p; 常量指针,指向一块区域,这块区域不可写,只能读。
char * const p; 指针常量,指向一块区域,这块区域可读可写,但是指针的值初始后就不能改,
类似于一般常量。
(2)
void print(const int*beg,const int *end) { while(beg!=end) { cout<<*beg++<<endl; } }
这里就是使用的库函数,使用begin()获得头指针,end()来获得尾指针。
(3)
void print(const int ia[],size_t size) { for(size_t i=0;i!=size;++i) { cout<<ia[i]<<endl; } }
这里就是手动的定位长度,自己再传入一个变量这样子。
2、引用的方法。
void print(int (&arr)[10]) { for(auto elem:arr) cout<<elem<<endl; }
由于优先级的问题,在传入指针数组的时候,需要加上一个括号,保证是传入的是这10元素的头指针。
3、附加多维指针的方法,就是说,当恒数组的数组,所以要保证列是已知的,然后按上面的方法确定行数。
吧