C++远航2

一、引用

引用可以是引用一个变量、指针、结构体等,其实就是一个别名,相当于人的外号。但是对引用操作,也就相当于对本体的操作。

语法:int a=3;

int &b=a;//b引用a

b=4;

cout<<a<<endl;//相当于a=4.

结构体:typedef struct {

int x=1;int y=2;}Coor;

int main(){Coor a;

Coor &b=a;//相当于结构体类型Coor的b引用了a;

b.x=4;

b.y=5;

cout<<a.x<<endl;

cout<<a.y<<endl;//分别是4,5,因为对结构体引用操作相当于对本体进行操作。r

eturn 0;}

指针引用:int main()

{

int a=10;int * b=&a;//指针b指向a

int *&c=b;//指针c引用b

*c=20;

cout<<*b<<endl;//b也是20,对引用c操作就是等价于对b操作。

return 0;}

指针的两类用法:

int a=2;int *p=&a;//指针p指向于a

int a=2;int *p;p=&a;//表示指针p指向于a的地址注意*p表示指针指向的内容,而p实际存储的是指向内容的地址。

引用作为函数的参数:

void fun(int *a,int *b){int c=0;c=*a;*a=*b;*b=c;}//将两个数调换的代码

int main()

{int x=10

;int y=20;

fun(&x,&y);

return 0;}

使用引用情况下应该写为:

void fun(int &a,int &b)

{int c=0;c=a;a=b;b=c;}

int main()

{int x=10;int y=20;

fun(x,y);

return 0;}

由上面的例子可以看出,符号&除了取变量的地址,很多情况下还可以作为引用。

二、const类型

const表示常量,

如:int x=2;//x是变量

const int x=3或者int const x=3;//x就是常量了。

const与指针类型:const int *p=NULL;int const *p=NULL;//两者完全等价

一些例子:int x=3;const int *p=&x;//此时指针是常量,可以指向其他,但是不能给指向内容赋值。即p=&y可以,但是*p=2错误。

int x=3;int *const p=&x;//此时该指针只能指向这一个位置了,即p=&y错误。因为该指针存储的地址是个常量。

const int x=3;const int *p=&x;//此时指向的是个常量,p=&y和*p=4都是错误。

三、const与引用关系int x=3;const int &y=x;//此时x=10可以,但是y=10就是错误。因为常量引用不能再一次对x进行赋值了。

总的来说,const在*外可以指向其他变量,但是在*内就不可以。

四、const与宏定义的关系

const int x=3;//常量,检查语法错误;

define x 3;//宏定义,不检查语法错误。

const int a=3;

const int *p=&a;//正确

int *p=&a;//错误

五、C++函数的新特性函数的默认值

void fun(int i,int j=5,int k=10);//声明可以

void fun(int i=2;int j; int k);//不可以,因为赋初始值必须都在右边才可以

//注意,代码中用函数,必须先声明,后定义。


函数的重载:在相同作用域下,函数名相同,但是函数的类型或者函数变量类型或者函数变量的个数不同。

如:int getmax(int x;int y);float getmax(float x; float y; float z)


内联函数:关键字:inlineinline int max(int a, int b, int c)int main(){......m=max(i,j,k);return 0;}//该内联函数直接将定义内容些进来,省了传回到定义地方算完之后再传回来的时间注意:内联函数是建议性的,不是你定义了编译器就会用。如果复杂编译器无法用。比如该定义函数有for循环等。


六、C++内存管理

内存本质:资源

谁掌握内存资源;操作系统

我们能做:申请/归还

申请内存:new

释放内存:delete//他们是运算符,不是函数

int*p=new int;delete p;

申请和释放一块内存:int *arr=new int[10];//申请10个int内存

delete []arr;//释放其他申请和释放内存方式:

c语言中:

void *malloc(size_t size);

void free(void *memblock)申请内存是否一定成功?不一定

int *p=new int [1000];

if (p==NULL)

{cout<<"失败"//申请失败;}

delete p;

p=NULL;//一个内存的释放int *p=new int[10000];if(NULL=p){//内存分配失败;//异常处理} delete []p;p=NULL;//块内存释放


示例:

#include "iostream"

#include"stdlib.h"

using namespace std;

int main(void)

{int *p=new int[20];//或者,int *p=new int;*p=20

if(NULL==P)

{

system("pause");

return 0;

}

cout<<*p<<Endl;

p[0]=10;

p[1]=20;

cout<<p[0]<<","<<p[1]<<endl;

delete []p;//如果只是delet p则只能释放第一个,其他的19个就无法释放

p=NULL;

system("pause");return 0;}

//总之在申请释放内存时候记住,首先int *str=new char[100];if[str==NULL){//内存申请失败return 0;}delete []str;str=NULL;//删除!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值