目录
namespace:作用域
namespace zyy //命名一个作用域
{
int a = 30;
}
在全局作用域定义一个变量a
#include <iostream>
using namespace std;
int a=20;
在main函数中输出a
int main()
{
cout<<a<<endl; //20
return 0;
}
在局部作用域再定义同名变量
int main()
{
int a = 10;
cout<<a<<endl; //10
//则输出结果为优先局部
}
在输出变量前加入作用域运算符,即可准确输出某作用域变量
cout << zyy::a << endl; //30
//::为作用域运算符,如果::前未加作用域名,默认为全局
动态申请空间
C++中动态申请空间使用 new 在堆区申请空间
在C语言中动态申请空间使用的是malloc
//在堆区动态申请空间
int* p = (int*)malloc(sizeof(int)); //malloc(4)
*p = 1;
cout << *p << endl;
free(p);//释放空间
p = NULL;
申请空间需要输入申请的字节大小
并且默认返回值为void*
malloc 释放空间使用函数为free
new函数动态申请空间如下
new申请空间时直接输入变量类型,并且返回值即为变量类型
new释放空间使用delete
int* p2 = new int;
*p2 = 2;
cout << *p2 << endl;
delete p2; //释放空间
p2 = NULL;
可以在申请空间同时初始化赋值
char* p3 = new char ('p');
cout << p3 << endl;
cout << *p3 << endl;
delete p3;
p3 = NULL;
new 指针
两种情况:
一、 非数组,new什么类型就返回这个类型的地址(指针)
二、. 是数组,返回首元素的首地址
1. new 整型的指针
int* *p6=new int*;
delete p6;
p6 = NULL;
2. new 整型指针的数组
int**p7=new int* [10];
delete[]p7;
p7 = NULL;
3. new 整型数组的指针
int(**p8)[10] = new (int(*)[10]);
delete p8;
p8 = NULL;
4. new 二维数组
int(*p9)[10] = new int[10][10]{ {1,2,3},{1,2,3} };
delete[]p9;
p9 = NULL;
5. new 函数指针
void(**func1)()=new (void(*)());
delete func1;
func1 = NULL;
总结:new——delete malloc——free 区别
1. malloc free 本质函数 需要头文件
new delete C++关键字 编译器支持
2.malloc参数指定的申请空间大小:字节 返回类型void* , 一般情况下需强转
new传递类型,返回对应类型地址
3.new申请空间 可初始化值,malloc只能后赋值
**4.new申请结构体 类自动调用构造函数,delete回收空间时,会自动调用析构函数
* malloc只负责申请空间,无法调用构造 析构函数