c++对c的加强(二)

registe关键字修饰

  1. C的关键字修饰:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。省去了CPU到内存中抓取数据的时间。
  • register : 不能修饰全局变量,也不能修饰函数,只能修饰局部变量。
  • static : 局部变量,全局变量,函数都可以修饰。
    注意在c中变量存在寄存器后就不能取地址,因为取地址是去内存的地址,但变量已经可以能被存在寄存器里了。
  1. C++的升级:
  • 可以取地址,如果取地址,则将变量重新加载到内存中;
  • volatile: 防止编译器将所修饰的变量加载到寄存器中进行优化

引用 vs 指针

  1. C++ 引用 vs 指针(都可以做形参和返回值): 指针容易造成段错误;引用则代表是变量的另一个别名,操作引用等于操作变量本身。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。不存在空引用。引用必须连接到一块合法的内存。指针可以在任何时间被初始化。
  1. 本质:指针是数据类型,引用是一种变量别名。
  2. 内存分配:都占用内存空间,但指针可以操作,引用则自动被系统优化,用户无法访问。
    级数:指针可以多级指针但引用最多到两级(右值引用)。
    使用效率:引用高于指针。
  3. 使用
int i;
int &n = i; //n即为i的引用,操作不分彼此。但引可以做形参。
  1. 优点
  • 交换实参值时避免使用内存而造成可能出现的内存错误;
  • 引用做函数的返回值,使函数的调用可以作为左值;(函数不能返回局部变量或地址,因为函数执行结束后就会释放空间)
  1. 引用的分类:左值引用和右值引用(注意左值引用只能绑定左值,右值引用只能绑定右值)引用占内存空间,但用户无法访问

     &:左值:可以对该值取地址或者可以修改;
     &&:右值:不能对该值取地址或者修改该值;通过&&定义,是一个右值引用的名字,但定义的右值本质上还是左值,需要用<font color = tomato>std::move()</font>转化成右值
    
  • 左值引用:替代指针的操作
  • 右值引用:临时对象开销问题(对象移动)

const修饰

  1. const:修饰一个变量(全局,局部)、修饰函数返回值
  • 作用:指定一个语义约束,让编译器将修饰的变量标记为只读变量(但并不等于常量,只是不可以通过变量名修改)。
  • 注意事项:const修饰一个变量必须初始化(因为一旦修饰就不能再去修改所以需要初始化)
    好处:可以防止函数调用时改变变量的值
  1. c++的升级
  • 将修饰的变量标记为常量,不可以x,不可以修改;
  • 指针和引用的赋值操作必须是const对const;
  • 多出常量表达式constexpr(vs const:在编译过程中就得到计算结果)

动态内存分配

  1. 动态内存分配(new,delete)
  • c:malloc free 标准使用
char *ptr = (char *)malloc(sizeof(char) *100);
if(ptr == NULL)
{
	printf("malloc error!\n");
	exit(1);
}
...
...
free(ptr);
ptr = NULL
  • c++:new,delete 标准使用:
int *ptr = new int[100]; //int p[100];
int *p2 = new int; //int *p2 = (int *)malloc(sizeof(int));
int *p3 = new int(5); //初始化为5
...
...
delete p2;
delete p3;
delete [] p;
  1. new vs malloc
  • new即能分配空间,也能初始化空间,malloc只能分配空间,不能初始化
  • new是按照数据类型的个数为单位分配,malloc是按照字节为单位分配空间

函数指针

  • c
typedef int(*P_FUNC)(int,int);
//P_FUNC p_func=函数名;
  • c++
using P_FUNC int (*)(int,int);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值