指针,引用及内存基础认识

char型指针在c++里面已经被当成字符串了,打印时候会把指针当做字符串打印,需要打印时候可以转化为void*类型

	char c = 'a';
    char* ptr_char = &c;
    cout<<(void*)ptr_char<<endl;

void* 一种特殊的指针类型,可以存放任意对象地址

  1. 存放一个内存地址,地址指向内容的类型不能确定。也就是说不能通过他改变指针指向的数据,即下面代码报错
	int num = 123;
    void* ptr = &num;
    *ptr = 456;
  1. void*类型指针一般用来:和别的指针进行比较、作为函数输入输出、赋值给另一个void*指针

引用:为对象起另一个名字

  1. 引用并非对象,只是为已经存在的对象起了一个别名
  2. 只能绑定在对象上,不能与字面值或者某个表达式计算结果绑定一起。如int &ref = 10就是错误用法,但是可以在前面加一个const更正,就可以看成一个常量引用。
  3. 引用必须初始化,故使用引用之前不需要测试有效性,因此引用可能比指针效率高。

动态内存分配

使用new分配内存

  1. 在运行阶段分配未命名的内存以存储值
  2. 只能通过指针来访问内存
int* ptr = new int;

使用delete释放内存

  1. 与new配对使用
  2. 别释放已经释放的内存
  3. 别释放声明变量分配的内存

注:不要使用delete释放同一内存两次;如果使用new [ ],为数组分配内存,则对应delete [ ]释放。

程序内存分配空间

  • 栈区stack
    由编译器自动分配释放,一般存放函数参数值,局部变量等,如int a中a就是存放在栈区;
    操作方式类似于数据结构中的栈,先进后出。
  • 堆区heap
    一般由程序员分配释放,若程序不释放,程序结束时可能由操作系统回收;如 int* a = new int;所分配给int四个字节的内存就存放在堆区,而指针变量存放在栈区
    与数据结构中的堆是两回事,分配方式类似于链表。
  • 全局区(静态区,static)
    全局变量和静态变量是存放在一起的,程序结束后由系统释放
  • 文字常量区
    常量字符串就存放在这里,程序结束由系统释放
  • 程序代码区
    存放函数体的二进制代码

参考B站老九学堂C++教学视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值