C++11学习笔记 2.4范围for、new内存动态分配、nullptr

一、范围for语句C++11

用于遍历一个序列
int v[]{12,13,14,16,18};
for(auto x:v)//数组v中每个元素依次放入x中并打印x值(把v每个元素拷贝到x中,打印x值)
{
cout<<x<<endl;
}
for(auto x:{11,12,13,15,25})
{
cout<<x;
}
省略拷贝,提高效率:
for(auto &x:v)//使用引用,就不用拷贝了,提高系统效率

二、动态内存分配问题

C中:供程序使用的存储空间,有程序区,静态存储区,动态存储区
C++中:进一步分为5个区域:
(1)栈:一般函数内的局部变量都会放在这里,由编译器自动分配和释放
(2)堆:程序员malloc/new分配,用free/delete来释放。忘记释放后,系统会回收
(3)全局/静态存储区:放全局变量和静态变量static。程序结束时系统释放
(4)常量存储区:“aaa”
(5)程序代码区

堆和栈不同的用途和区别
(1)栈 空间有限的。这是系统 int a=4;分配速度快,程序员也控制不了
(2)堆 只要不超出你实际拥有的物理内存,也在操作系统允许你能够分配的最大内存之内,都可以分配给你,分配速度比栈慢,你可以随时用malloc/new分配,用free/delete来释放,非常灵活。

在c语言中,用malloc和free来分配和释放内存用,malloc() free()是函数,
malloc(memory allocation):动态内存分配
一般形式:
void *malloc(int NumBytes);//NumBytes:要分配的字节数 分配成功返回
指向被分配内存的指针,分配失败则返回NULL
当这段分配的内存不使用时,应该用free来内存释放,其他地方使用
void free(void *FirstByte);
int p=NULL;//c语言写法
p=(int
)malloc(sizeof(int));//在堆中分配4个字节
if(p!=NULL)
{
分配成功
*p=5;
cout<<*p<<endl;
free§;
}
strcpy(p,“hello world”);//内存溢出时不提醒,直接覆盖其他地方的,会造成程序不稳定,崩溃
strcpy_s(p,100,“hello world”)//更安全

在C++中,使用new和delete
new和delete:是运算符(标识符)。C++中不能用malloc和free
new和delete也和malloc和free一样分配和释放内存,同时还做了更多的事(调用构造函数)。
new一般使用格式:
(1)指针变量名=new 类型标识符
(2)指针类型名=new类型标识符(初始值);
(3)指针类型名=new类型标识符[内存单元个数]; delete[] p;
补充:
配对使用 有malloc成功必然有free,有new成功必然有delete
free/delete,不要重复调用
malloc/free和new/delete的区别

三、nullptr

C++11中引入新关键字,代表的也是空指针 能避免指针和整数之间的混淆
char *p=NULL;//NULL实际是0 pnullptr成立
char *q=nullptr;//q
NULL成立
int a=NULL;//可以
int b=nullptr;//不可以
typeid(NULL).name()//int
typeid(nullptr).name()//std::nullptr_t
NULL和nullptr实际上是不同的类型
结论:对于指针的初始化,和大家以往用到的和指针有关的NULL的场合,能用nullptr都用nullptr取代NULL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值