---- 整理自狄泰软件唐佐林老师课程
文章目录
1. C++ 中的动态内存分配
- C++ 中通过 new 关键字进行动态内存申请
- C++ 中的动态内存申请是 基于 类型 进行的
- delete 关键字用于内存释放
1.1 变量申请释放
1.2 实例分析:C++ 中的动态内存分配
#include <stdio.h>
int main(int argc, char *argv[])
{
int* p = new int;
*p = 5;
*p = *p + 10;
printf("p = %p\n", p);
printf("*p = %d\n", *p);
delete p;
p = new int[10];
for (int i = 0; i < 10; i++) {
p[i] = i + 1;
printf("p[%d] = %d\n", i, p[i]);
}
delete[] p;
return 0;
}
1.3 new 关键字与 malloc 函数的区别
new 关键字是 C++ 的一部分 | malloc 是由 C 库提供的函数 |
---|---|
new 以 具体类型 为单位进行内存分配 | malloc 以 字节 为单位进行内存分配 |
new 在 申请 单个类型变量 时 可进行初始化 | malloc 不具备 内存初始化的特性 |
1.3.1 new 关键字的初始化
1.3.2 实验:初始化动态内存
- new 在申请 单个类型变量 时 可进行初始化
#include <stdio.h>
int main(int argc, char *argv[])
{
int* pi = new int(1);
float* pf = new float(3.14f);
char* pc = new char('c');
printf("*pi = %d\n", *pi);
printf("*pf = %f\n", *pf);
printf("*pc = %c\n", *pc);
delete pi;
delete pf;
delete pc;
return 0;
}
2. C++ 中的命名空间
- 在 C 语言中只有一个全局作用域
- C 语言中所有的全局标识符共享同一个作用域
- 标识符之间可能发生冲突
- C++ 中提出了 命名空间 的概念
- 命名空间将全局作用域分成不同的部分
- 不同命名空间中的标识符可以 同名 而 不会发生冲突
- 命名空间 可以相互嵌套
- 全局作用域 也叫 默认命名空间
2.1 C++ 命名空间的定义
2.2 C++ 命名空间的使用
- 使用整个命名空间:
using namespace AAA;
- 使用命名空间中的变量:
using AAA::variable;
- 使用 默认命名空间(全局作用域) 中的变量:
::variable
#include <stdio.h>
namespace First
{
int i = 0;
}
namespace Second
{
int i = 1;
namespace Internal
{
struct P
{
int x;
int y;
};
}
}
int main()
{
using namespace First; // 使用整个 First 命名空间
using Second::Internal::P; // 使用 Second 命名空间中的变量
printf("First::i = %d\n", i);
printf("Second::i = %d\n", Second::i);
P p = {2, 3};
printf("p.x = %d\n", p.x);
printf("p.y = %d\n", p.y);
return 0;
}