C++学习总结之(一)//大一下学期
- 指针:
定义:指针是有一个对象的地址,称为指向这个对象,指针是有不同类型的根据他所指向的对象的类型来确定;
对于指针来说&这是个去地址符号,*是取内容符号;
Int val=100;
Int *pi=&val;
指针的一些操作
Int val=100;
Int *pi=&val;
cout<<sizeof(pi)//计算指针的大小;
cout<<π//输出pi这个指针的地址;
cout<<pi;//输出val的地址其实就是pi这个指针;
cout<<*pi;//输出输出这个val的值
pi++可以指向下一个位置;
指针的初始化方法 - int pi=nullptr;
- int pi=NULL;
- int pi=0;
还有void类型的指针 - new和delete
new分配的空间也就是一个动态数组但是却不能用一般动态数组的函数比如说end(),begin() - int *p1=new int;//在堆上分配一个int类型的对象,并返回他的地址;
- int *p2=new int[100];//在堆上分配一个int对象,初始值100,返回地址;
char *buf=new char[1000];//预分配一个空间,首地址保存在buf里面
int pi=new(buf)int;
//在buf中创建一个int对象,不用再重新在分配新的空间;
delete对于new来说如果new分配的空间不被收回会最后爆内存最后电脑可能会死机
delete指针
int ip=new int;
ip=512;
delete ip;//释放指针指向int对象时,释放内存虽然空间释放了但是 ip这个名字不能再次使用了
delete[] pa;这是释放一个new的动态数组的空间;
引用:
左值引用
就是传统的引用方法,右值引用是c11之后才增加,引用必须是带有初始化;
int value=100;
int &pi=value;
实现了引用其实就是两个元素实现了绑定,改变其中一个另一个也会改变
右值引用:右值引用只能引用右值
int i=10;
int &r=i;
int &&rr=i3;
常量指针;
const int ival=100;
const pi=&ival;
这样的指针无法被改变pi=10//错误;
const int const pi=&ival;第二个const是限定pi的地址的所以pi的值无法被改变;
结构体
struct node
{
int x,y
};
结构体是一个局部的;调用的话node.x node.y
枚举
enum type{0,1,2,3}
字符串:
string s1;
string s2;
string s3;
上一个学期经常使用字符数组来储存字符串,string比字符数组可以储存一段字符串;
strcat(p1,p2)把p2加到p1返回p1
strcpy(p1,p2)把p2赋值p1返回p1
另外两个字符串之间可以进行加减的运算;
s1=s2+s3;
字符串的初始化
string s4(n,‘c’)
getline(is,s)从is输入流中读取内容赋值给s;比如说getlin(cin,s)
s.c_str()把字符串转化为字符数组
isalnum(c)当c是字符或者是数字是真
isalpha(c)字母时为真
tolower(c)返回小写
toupper(c)返回大写
vector容器;
对于这个知识已经做过总结,所以简单总结
v.sh_back(a)是向容器里添加元素
v.pop_back()删掉容器的末尾的元素;
对于vector里面元素的访问其实类似于从零开始的数组
迭代器
vector::iterator it1;这是一个迭代器的定义
迭代器其实就类似与指针逐一对容器里的元素访问
函数
函数有系统函数和自己定义的函数
函数的定义
int,bool,double等类型的函数这类函数都有返回值通过return a;这样来返回;void函数属于无回值函数这个可以实现比如交换等;
函数的定义
int name(int x,int y)
{
return x+y;
}
函数的调用
name(a,b)
递归函数:
递归函数就是在一个函数里面再调用这个函数让其继续同样的操作指导满足条件;
int fac(int n){
if(n>1)
return nfac(n-1);
return 1;
}运用递归时一定要注意结束条件否则会无限循环,陷入死循环;
函数的引用
int name(int &x,int&y)
这样的话调用话被调用的值会改变;
函数的重载
void print(const intb,const inte)
{……….}
void print(const int ia [],size_t size)
{……}
就是同一函数名可以调用不同类型的数据