C语言与指针
说到C语言,就不能不说指针。指针的使用使C语言更加灵活和高效。但指针又使程序具有不确定性和危险性,具体表现如下:
指针不需要初始化,这具有很大的危险性;
指针是可计算的,这使非法访问其它内存单元成为可能(如:使用指针法操作数组,造成越界);
指针是可以重新赋值的,这就可能存在“野指针”(即无法再访问的地址);
指针的可读性不好。
2018/8/12
1
面向对象方法
引用
针对C语言中指针的优点和缺点,C++引入了引用来部分取代指针的功能。引用扬弃了指针。
在C++中,引用(reference)是一个对象的别名,在定义引用时必须使用一个对象来初始化它:
int a;
int &ra = a; //声明ra是a的引用
此时,a用来初始化引用ra,以后无论改变a还是ra,实际上都是改变a。
2018/8/12
2
面向对象方法
使用引用的说明
声明引用时必须初始化(因为引用是一个对象的别名,对象如果不存在,那么怎么给它起别名)。对引用的初始化,可以用一个变量名,也可以用另一个引用()。
引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间,它们有共同的内存地址。
引用在初始化后不能再被重新声明为另一变量的别名(从一而终)。
2018/8/12
3
面向对象方法
为什么使用引用
刚才我们学习了引用是什么,下面我们以实现两个变量交换的函数来看看引用有什么作用()。
在C++中使用引用主要是为了将引用作为函数的参数(注意使用的格式 )和返回值使用,这时引用具有指针的能力,同时又具有可读性好的特点。
使用引用和指针传递参数的比较(-21)。
2018/8/12
4
面向对象方法
使用引用的二义性问题
void swap(int a,int b);
void swap(int *a,int *b);
void swap(int &a,int &b); //ambiguous
int main(){
int a =10, b=20;
swap(a,b); //ambiguous call
return 0;
}
2018/8/12
5
面向对象方法
使用引用的注意事项
不能建立void类型和数组的引用,但可以建立指针变量的引用(-23);
可以用const对引用加以限定,此时不允许改变该引用所引用的变量的值。我们在定义形参时,将某些指针和引用类型的形参使用const进行修饰,就是这个目的:保护指针和引用所指向或引用的内容。
可以用常量或表达式对引用进行初始化,但此时必须用const作声明(为什么会有这种语法呢)。
2018/8/12
6
面向对象方法
引用常量或表达式
void func( int &){
}
int main(){
func(1); //error,why?
int a = 10;
func(a);
return 0;
}
2018/8/12
7
面向对象方法
string
在C语言中处理字符串使用的是字符数组(字符串就是以“\0”结束的字符数组)。而在C++中既可以使用传统的C语言方式处理字符串,还可以使用C++标准库提供的字符串类string来处理字符串。使用string来处理字符串更加直观、高效。
使用string类必须使用头文件<string>。
2018/8/12
8
面向对象方法
string的初始化
在C++中,string对象的初始化可采用如下几种方式:
string str1 = “hello”;
string str2(“hello”);
string str3(str1);
string str4(n,’c’);
注意:在C++中,变量也可以采用2的方式初始化的,如:int a(10);
实际上,string不是C++中的基本数据类型,而是C++标准库中的一个类()。
2018/8/12
9
面向对象方法
string对象的读和写
string对象的读写操作和标准数据类型的数据一样,但在使用时,要注意:
在使用cin>>s(s为string对象)进行读操作时,读操作将忽略开头的所有空白字符(所谓的空白字符包括:空格、Tab等),并读取到再次遇到空白字符为止。所以不能读取整行字符串。
若要读取整行字符串,需要使用函数getline(cin,s) 。
string s; getline(cin,s);
2018/8/12
10
面向对象方法
第03讲 引用和string 来自淘豆网m.daumloan.com转载请标明出处.