C++作用域与动态申请空间

文章讲述了C++中的namespace作用域概念,以及动态内存申请技巧(new、malloc和delete的用法和区别),强调了在不同作用域下定义变量的行为以及如何正确释放内存。
摘要由CSDN通过智能技术生成

目录

namespace:作用域

动态申请空间


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只负责申请空间,无法调用构造 析构函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摆烂的李某人O.o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值