目录
作用域运算符
我们都知道变量有全局变量和局部变量,通常情况下,如果有两个同名变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。
#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释放。因此要适时释放动态分配的储存空间。