第10课 C++中的新成员
1. 动态内存分配
(1)C++通过new关键字进行动态内存申请,是以类型为单位来申请空间大小的
(2)delete关键字用于内存释放

▲注意释放数组时要加[],否则只释放这个数组中的第1个元素。
【实例分析】C++中的动态内存分配
#include <stdio.h> int main()
{
int* p = new int; *p = ;
*p = *p + ; printf("p = %p\n", p); //p保存堆上开辟空间的地址
printf("*p = %d\n", *p);// delete p; p = new int[];//申请10个int型空间 for(int i=;i<; i++)
{
p[i] = i + ;
printf("p[%d] = %d\n", i, p[i]);
} delete[] p; //注意:释放数组时[]不能漏掉 return ;
}
2. new关键字
(1)对比new和malloc
|
new |
malloc |
|
|
性质 |
是个关键字,属C++的一部分 |
是由C库提供的函数 |
|
申请单位 |
以具体类型为单位 |
以字节为单位 |
|
内存初始化 |
申请单个类型变量时可进行初始化 |
不具备内存初始化的特性 |
(2)new关键字的初始化
int* pi = new int(1);
float* pf = new float(2.0f);
char* pc = new char('c');
【编程实验】初始化动态内存
#include <stdio.h> int main()
{
int* pi = new int(); //开辟1个int型空间,并初始化为1
//int* pa = new int[1];//注意,这时申请一个数组,与前一行含义不同 float* pf = new float(2.0f);
char* pc = new char('c'); printf("*pi = %d\n", *pi); //
printf("*pf = %f\n", *pf); //2.000000
printf("*pc = %c\n", *pc); //c delete pi;
delete pf;
delete pc; return ;
}
3. C++中的命名空间
(1)在C语言中只有一个全局作用域
①C语言中所有的全局标识符共享同一个作用域
②标识符之间可能发生冲突
(2)C++中提出了命名空间的概念
①命名空间将全局作用域分成不同的部分
②不同命名空间中的标识符可以同名而不会发生冲突
③命名空间可以相互嵌套
④全局作用域也叫默认命名空间
(3)C++命名空间的定义:namespace Name {}
(4)命名空间的使用
①使用整个命名空间:using namespace name;
②使用命名空间中的变量:using name::variable;
③使用默认命名空间中的变量: ::variable
【实例分析】命名空间的使用
#include <stdio.h> namespace First
{
int i = ;
} namespace Second
{
int i = ; //命名空间的嵌套
namespace Internal
{
struct P
{
int x;
int y;
};
}
} int main()
{
using namespace First;//使用First整个命名空间
using Second::Internal::P;//使用命名空内部的P结构体 printf("Fisrt::i = %d\n", i); //0。可以直接写i,因为使用了First整个命名空间
printf("Second::i = %d\n", Second::i);//1。须带命名空间的名字 P p = {, }; printf("p.x = %d\n", p.x);//
printf("p.y = %d\n", p.y);// return ;
}
4. 小结
(1)C++中内置了动态内存分配的专用关键字
(2)C++中的动态内存分配可以同时进行初始化
(3)C++中的动态内存分配是基于类型进行的
(4)C++中命名空间概念用于解决名称冲突问题
第10课 C++中的新成员的更多相关文章
- Windows 10 版本 1507 中的新 AppLocker 功能
要查看 Windows 10 版本信息,使用[运行]> dxdiag 回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...
- C++深度解析教程学习笔记(4)C++中的新成员
1. 动态内存分配 (1)C++通过 new 关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete 关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第 1 个 ...
- 第10课 C++中的动态内存分配
C++中的动态内存分配 C语言是通过库函数来完成动态内存分配的,而C++是通过关键字从语言层面支持的. C语言中的malloc是基于字节来进行内存申请的,C++中是基于类型来进行的. delete加上 ...
- C++解析(8):C++中的新成员
0.目录 1.动态内存分配 1.1 C++中的动态内存分配 1.2 new关键字与malloc函数的区别 1.3 new关键字的初始化 2.命名空间 2.1 作用域与命名空间 2.2 命名空间的定义和 ...
- 第10课 初探 Qt 中的消息处理
1. Qt消息模型 (1)Qt封装了具体操作系统的消息机制 (2)Qt遵循经典的GUI消息驱动事件模型 2. 信号与槽 (1)Qt中定义了与系统消息相关的概念 ①信号(Signal):由操作系统产生的 ...
- NET Framework 4 中的新 C# 功能
http://msdn.microsoft.com/zh-cn/magazine/ff796223.aspx C# 编程语言自 2002 年初次发布以来已经有了极大的改善,可以帮助程序员编写更清晰易懂 ...
- 【译】.NET Core 3.0 中的新变化
.NET Core 3.0 是 .NET Core 平台的下一主要版本.本文回顾了 .Net Core 发展历史,并展示了它是如何从基本支持 Web 和数据工作负载的版本 1,发展成为能够运行 Web ...
- Apache Kudu: Hadoop生态系统的新成员实现对快速数据的快速分析
A new addition to the open source Apache Hadoop ecosystem, Apache Kudu completes Hadoop's storage la ...
- [转]【译】.NET Core 3.0 中的新变化
.NET Core 3.0 是 .NET Core 平台的下一主要版本.本文回顾了 .Net Core 发展历史,并展示了它是如何从基本支持 Web 和数据工作负载的版本 1,发展成为能够运行 Web ...
随机推荐
- antd中fomr中resetFields清空输入框
1.如果没有initValue的情况下,直接使用resetFields可以清空文本框的值 2.如果是有initValue的情况下,直接使用resetFields方法会直接重置为initValue的值 ...
- 使用自己的域名解析cnblogs博客(CSDN也可以)
本文主要介绍怎样使用自己购买的域名指向cnblogs博客 通常来说技术人员都会创建个自己的技术博客,总结下工作中的问题,经验等等,不过某些博客的访问链接的确是不太容易记忆或者输入,对我们分享造成一定的 ...
- matlab max()
max()函数 (1)可以找出矩阵元素中每列的最大值 max(A) ,max(A,[],dim ),带返回值的[C,I]=max(A).[C,I]=max(A,[],dim) max(A,[],dim ...
- SUST OJ 1642: 绝地求生—死亡顺序
1642: 绝地求生-死亡顺序 时间限制: 1 Sec 内存限制: 128 MB提交: 81 解决: 53[提交][状态][讨论版] 题目描述 最近陕西科技大学六公寓的小东同学深深的入迷了一款游戏 ...
- JPA 简单实体映射和EntityManagerAPI
[常用注解] 使用JPA 指定映射关系时,有两种方式,一种是使用xml 方式,另一种是注解方式,笔者推荐使用注解方式.在JPA 映射简单实体时,常用的注解如下: @Entity:修饰实体类对象,表示该 ...
- web 资源好文
https://www.jianshu.com/p/e065aadf8daa : 五年 Web 开发者 star 的 github 整理说明
- [Perl] 删除数组中重复元素
写一个小程序时候,需要去除一个数组中的重复元素,搜索了一下,找到的代码主要是两种,一种是使用grep函数,一种是转换为hash表,代码分别如下: 使用grep函数代码片段:代码: my @array ...
- encode decode enumerate
format的用法 print(format('aa','>20')) print(format('aa','<20')) print(format('aa','^20')) 打印结果如下 ...
- k8s helm 可视化UI 管理工具 monocular部署试用
官方建议是用 helm 进行安装,但是helm 有点费事(各种原因...) 所以使用官方说的使用docker-compose 但是默认官方的compose 跑起来 还是真费事,经过调整,修改了一版支持 ...
- Asp.net自定义控件系列(一)
最近看到公司某个网站中用到了自定义控件,咋一眼看去,不明白什么玩意, 网上一搜,好像确实不是几句话就能写出强大的自定义控件.好吧,作为一个码农,我决定从基本学起,写一个关于自定义控件学习过程系列. 当 ...