作用域运算符、无名联合、运算符new和delete

目录

作用域运算符

无名联合

运算符new和delete


作用域运算符

我们都知道变量有全局变量和局部变量,通常情况下,如果有两个同名变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。

#include<iostream>
using namespace std;
int a = 10;
int main()
{
	int a = 5;
	cout << "a=" << a << endl;
	return 0;
}

输出值为5。

如果希望在main函数中使用的全局变量的值,可以使用"::",也就是作用域运算符。

#include<iostream>
using namespace std;
int a = 10;
int main()
{
	int a = 5;
	cout << "a=" << ::a << endl;
	return 0;
}

输出值为10。

无名联合

无名联合是C++中的一种特殊联合,它可使一组数据共享同一内存地址。

union
{
	int i;
	double d;
}x;

在此无名联合中,无名联合变量x中的整形成员i和双精度型d具有相同的存储地址。在访问无名变量时,不能访问无名联合变量,而应该访问联合变量中的成员,即使用x.i或x.d。

运算符new和delete

简单来说new进行内存的分配,delete进行内存的释放。


new的分配形式为:

指针变量名=new 类型;

int* p; //定义一个整型指针变量p
p = new int;//new动态分配存放一个整数的内存空间,并将其首地址赋给指针变量p

delete释放空间的形式为:

delete 指针变量名;

其中的指针变量还保存着new分配的首地址。

#include<iostream>
using namespace std;
int main()
{
	int* ptr;//定义一个整型指针变量ptr
	ptr = new int;//动态分配一个整型储存空间,并将首地址赋给ptr
	*ptr = 10;
	cout << *ptr<<endl;
	cout << ptr<<endl;
	delete ptr;//释放指针ptr指向的储存空间
	return 0;
}

运行结果:

 地址是随机的(可能不一样


使用new可以为数组动态分配内存空间,要缀上数组大小;可以为多维数组分配空间,要提供维数以及所有维的大小。

int* pi=new int[10];

此时释放空间可用如下格式:

delete []指针变量名;


也可以分配内存的同时,进行初始化,但不能对数组进行初始化:

#include<iostream>
using namespace std;
int main()
{
	int* ptr;//定义一个整型指针变量ptr
	ptr = new int(99);//动态分配一个整型储存空间,并将99作为初始值赋给它
	cout << *ptr<<endl;
	cout << ptr<<endl;
	delete ptr;//释放指针ptr指向的储存空间
	return 0;
}

使用new分配的储存空间不会自动释放,只能通过delete释放。因此要适时释放动态分配的储存空间。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值