一、指针和引用
1.指针:类型 *指针变量
例如:int *pi;
简单的使用方法:
int ival=120;
int *pi=&ival;
注意:定义指针时指定的类型实际上是指针指向的对象的类型;通过指针可以直接给对象赋值;定义指针时必需给指针初始化。
初始化指针的方法:
int *pi=nullptr;
int *pi=0;
或者调用头文件#include下的NULL
int *pi=NULL
2.引用:类型 &引用变量=初始值
注意:引用必须初始化,初始值是一个有内存地址的对象,如变量;初始化后就不能更改;它只是为一个已经存在的对象起的另一个名字并且与所指对象占据同一个地址空间。
int ival=100;
int &ra=ival;//正确
int &ra1;//错误,没有初始化
int &ra2=&ival;//错误,不能用地址进行初始化
int &ra3=10;//不能用没有内存地址的数值初始化
3.右值引用:&&右值引用变量=右值表达式
注意:右值引用只能绑定临时对象,不能够绑定左值。
使用:
Int i=42;
int &r=i;//正确
int &&rr=i;//不能绑定在左值
int &r2=i*5;//i*5是右值
int &&r3=i*5;//正确
将左值赋值给右值的方式:
运用头文件中的函数 std:move()
int &&rr1=10;
int &&rr2=rr1;错误
int &&rr3=std::move(rr1);//正确
二、new和delete
(一)new
定义:new运算符在堆上动态分配空间,创建对象,并返回对象的地址。一般将返回的地址保存在指针变量中。
使用:
1.new 类型 或者 new 类型(初始值)
例如:
int *pi=new int;
*pi=521;
int *pi2=new int(100);
2.new 类型[数组大小]
例如:
int *pi=new int [100];分配一个大小为100的int类型的数组并返回他的地址。
(二)delete
定义:将new运算符分配的空间释放,否则将造成内存泄漏。
使用:
1.delete 指针
int *pi=new int;
*pi=521;
delete pi;
2.delete [] 指针
int *pi=new int[100];
delete [] pi;
三、标准库类型string
头文件:#include
这里仅介绍string的简单运用
(一)利用string读入文本:
string word;
while(cin>>word) //cin反复读取单词,遇到空格停止一次,直到文件末尾
cout<<word<<endl; //反复输出单词
或者利用getline()函数,直到遇到换行符停止一次。
string line;
while(getline(cin,line));
cout<<line<<endl;
求string对象的长度的方法:
string line="hello";
string::size_type len1=line.size();
auto len2=line.size();
decltype(line.size()) len3=0;
或者将string类型转换为c风格
string s1="if you really want it";
int x;
x=strlen(s1.c_str());