3、C++新的关键字
C++ 添加了一些全新的关键字。
1、new
new 来进行动态内存的分配,而delect 则是进行内存的释放,
申请的方式:
变量申请:
int *p = new int; // 申请开辟一块四个字节的内存空间,一个 int 型的空间 delect p; // 删除的是变量
数组申请:
int *p = new int[5] // 开辟一个大小为 5个 的整型的数组空间 delect [] p; // 删除的是数组
申请的空间一般是没有经过初始化的,如果需要初始化的话,就要申请的方式变为:
int *P = int[5]();
添加了 ()的话,申请的内存空间就会被初始化为零,原因是添加了括号,就会调用 new 的构造函数。
new 和 malloc 区别:
(1)new 是C++的,malloc 是C库提供的函数
(2)new 以具体类型为单位进行内存的分配,malloc 只能以字节为单位进行内存的分配
(3)new 在申请单个类型变量时可以直接进行初始化,malloc 不具备内存初始化的特性
申请单个类型的时候,直接进行初始化:
int *p = new int(1); printf("*p = %d\n", *p); delete p;
可见,申请具体类型的时候,直接初始化为“1”,
2、命名空间
其实就是相同的名字,根据使用的区域进行划分,解决名称冲突的问题,
命名空间的定义:
命名空间的定义: namespace first { int i = 0; } namespace second { int i = 1; namespace third { int j = 3; } }
使用:
使用整个命名空间 using namespace name;
使用命名空间的变量 : using name :: 变量
使用默认的命名空间的变量: :: 变量
使用:
using second::i; printf("i = %d\n", i); using second::i; printf("i = %d\n", first::i); using second::third::j; printf("j = %d\n", j);
3、强制类型转换
好几个关键字,不想看,
4、指针和引用的区别
指针是一个变量,其值是一个内存的地址,,通过指针访问对用内存地址中的值
引用只是一个变的新的名字,所有对引用的操作,都会被传递到被引用的变量上,
指针就是变量,不需要进行初始化,也可以指向不同的地址
引用天生在定义的时候,就被初始化,之后不能再引用其他的变量、
5、extern “C”的分析:为什么C不支持函数的重载
extern “C”是告诉编译器,里面的内容是要按照C的方式进行编译,而C++编译的方式和C的编译的方式,对于函数的编译的方式,他们只在对函数名编译的方式不一样,也就是说,它们各自的编译器对函数名命名的方式不一样,而函数体内部的编译方式,其实是一样的,
C++编译器: 对函数名会添加一些参数的信息,所以可以支持函数的重载
C编译器 : 对函数名不会添加一些参数的信息,所以不支持函数的重载,