C++内存动态分配和引用
来源:互联网 发布:java软件开发工程师 编辑:程序博客网 时间:2024/05/16 14:09
1.动态内存分配
(1)
1)C语言:malloc/calloc/realloc free2)C++: new/delete运算符
new运算符用语动态内存分配, delete运算符用与动态内存释放
c++:
int* p = new int;
*p = 100;
delete p;
-------------------
int* p = new int(100);
delete p;
--------------------
int* parr = new int[10];
parr[0] = 10;
parr[1] = 20;
...
delete[] parr
----------------------
不能用二级指针接收二维数组的地址,错误使用:int** ppi = new int[3][4]
如果定义二维数组需要用数组指针
int (*ai) = new int[3][4] ;
(2)定位分配:
再分配内存的同时指定起始位置,具体的语法格式如下:
new (指针) 类型(初始值)
主要用于指定起始位置 ;
--主要用于指定起始位置
定位分配的作用:
定位分配的意义在于,
2.引用的概念和作用:
(1)引用和指针的区别:
a.引用必须在定义的同时进行初始化,指针可以不做初始化 ;
b.引用不能为空,指针可以为空 ; 若const int &b = NULL ;//成立
c.引用不能更换目标,指针可以更换目标;
d.不能声明引用型数组,可以声明指针型数组
(扩展)a.可以定义指向指针的指针(二级指针),但是不能定义指向引用的指针(要用引用的指针,不如直接用指针指向原来的值的地址)。
int a = 10 ;int *p = &a ;//ok
int **ppi = &pi ;//ok
int& b = a ;int& *ra = &b ;//error
b.可以定义引用指针的引用(给指针起别名),但是不可以定义引用引用的引用(没有二级引用)
int a= 10 ;int *pa=&a ;
int *&ra = pa ;//ok
c.可以定义指针数组,但是不能定义引用数组,但是可以定义数组的引用 ;
int* arr[10]; // ok
int& arr[10]; // error
int (*pa)[10]; // 数组指针
int (&ra)[10]; // 数组引用 ok
(2)引用作为函数的形参有何作用
a.通过引用作为函数的形参,可以实现对实参的修改;
b.通过引用作为函数的形参,避免传递过程中数据的拷贝;
c.使用const修改函数的引用型形参,可以避免实参的意外修改,同时也可以接收表达式、字面值、常量等实参,因此以后的编程尽量使用引用和const;
(3) 引用作为函数的返回值
永远不要返回局部变量(包括函数的形参)的引用,但是可以返回静态局部变量/全局变量/动态内存/实参的引用/结构体中成员变量 的引用
int ival = 1024;int &refVal = ival; // ok: refVal refers to ival
int &refVal2; // error: a reference must be initialized
int &refVal3 = 10; // error: initializer must be an object
- C++内存动态分配和引用
- C和C++动态分配内存
- C和C++中动态分配内存,区别
- C语言复习 指针和动态分配内存
- C和C++中动态分配内存,区别
- C动态分配内存
- 【c++】C++ 动态分配内存
- C中动态分配内存
- C语言动态分配内存
- C动态分配内存
- C语言动态分配内存
- C语言--动态分配内存
- C动态分配内存
- C语言有关内存和动态分配内存传递问题
- 转载和积累系列 - C语言学习笔记 - 动态分配内存
- C语言 利用malloc()和realloc()动态分配内存
- C和C++中动态分配内存的区别
- C语言:使用malloc()和calloc()动态分配内存
- 4、spring_jdbc02
- [框架整合]spring+springmvc+mybatis(1)
- 全方位立体监控之日志解决方案ELK(3)
- IOS成长之路-UIButton定义和设置圆角
- 解决Android Studio加载第三方jar包,出现包重复加载的问题
- C++内存动态分配和引用
- Dex 文件超出规定大小的解决方法
- MFC的多国语言界面的实现
- 苹果app上架因IPv6不支持而拒绝,本地IPV6测试方法
- android之dp和px之间的转换
- VPN
- MATLAB之fopen函数
- ios文章分享书签
- Linux下服务器CPU过高的诊断