从小白开始学C++ 说明符、限定符、new的两种用法

说明符和限定符

  • auto : 将变量声明位自动变量
  • register : 将变量声明为寄存器存储类型
  • static : 被用于局部声明中,表示局部变量的存储持续性为静态
  • extern : 表明是引用声明,即声明引用在其他地方定义的变量
  • mutable : 它用来指出,即使结构或者类变量为const,其某个成员也可以被修改
  • const : 表明内存被初始化后,程序不能再对它进行修改
  • volatile : 表明即使程序代码没有对内存单元进行修改,其值也可能发生改变
    最后一个限定符很有意思,怎么可能不修改,自己会改变呢?
    其实例子是有的:比如一个指针指向某个硬件位置,其中包含了来自串行端口的时间或信息,此时硬件(而不是程序)可能修改其中的内容。或者两个程序可能相互影响,共享数据

下面我们看看new操作符的两种用法

#include <iostream>
#include <new>
struct chaff
{
    char t[20];
    int flag;
};//定义一个结构体
int buffer1[50];
char buffer2[100];//分配两个数组空间
int main()
{
    chaff *p1,*p2;//两个结构体指针
    int *p3,*p4;//两个int型指针
    p1 = new chaff;
    p3 = new int[20];
    p2 = new (buffer2) chaff;
    p4 = new (buffer1) int [20];
    cout << p1 << " " << &p1<<"\n";
    cout << p2 << " " << &p2<<"\n";
    cout << p3 << " " << &p3<<"\n";
    cout << p4 << " " << &p4<<"\n";
    cout << &buffer1 <<"\n";
    cout << &buffer2;
    return 0;
}

输出结果

0x120e38 0x6dfeec
//第一个地址表示p1指向的新开辟的chaff结构的首地址
//第二个地址表示p1的地址
0x4c6100 0x6dfee8
//第一个地址表示p2指向的分配的空间的首地址
//可以知道它与数组buffer2的首地址是一致的
//第二个地址表示p2的地址
0x121330 0x6dfee4
0x4c6020 0x6dfee0
0x4c6020
0x4c6100

其余结果请读者自行分析
这里我们可以看到new 的两种用法:

1 在堆(heap)中找到一个足以能够满足要求的内存块

2 使用程序用所指定的位置来进行存储

您的点赞是我创作最大的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

国家一级假勤奋研究牲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值