C++Primer Plus(第六版)第四章学习笔记(2)

结构简介

定义:用于同时存储多种类型数据的类型,本质可以说是用户定义的一种数据类型
关键字:struct

用法

  1. struct关键字声明
  2. 标识符作为该数据格式的名称
  3. 在定义之后使用时在CPP中可以省略struct,C中不可

性质

  1. 可以使用初始化列表
  2. 不允许缩窄转换

用法

初始化方法

struct perks
{
   int key_number;
   char car[12];
} mr_glitz = 
{
   7,
   "Packard"
};

关键字:共用体(union)

define: 数据格式,可以存储不同的数据类型,但是同时只能存储一种数据类型。

示例

union one4all
{
  int int_val;
  long long_val;
  double double_val;
};

以上共用体的示例的话,当存储long时,就会丢失其他类型的数据。
长度是其中最长的成员长度。
用于内存非常宝贵的场合。

关键字:指针

定义:一种变量,用于储存数据的地址。
声明:因为不同的数据类型长度不同,所以在声明指针时需要指明是哪种

 int * p_update;

“*”声明是指针,int表示是整型,p_update是指针。
注意

  • 每声明一个指针变量,都需要用一次"*".
  • 指针的定义只会分配存储指针所指的数据地址的空间,不会分配指针所指的数据的内存。也就是说,不能直接用*p_update来赋值,这样很危险,有可能p_update这个地址所指的类型并没有内存。
  • 给指针赋值
int* pt;
pt = (int*) 0xb8000000;

cpp 不能直接用整数来赋值,会造成类型不匹配。

** 用new来分配内存**
new运算符可以想成,new就是告诉程序,我需要一段内存,而内存的大小就是new后面的数据类型的大小。

typename * pointer_name = new tapename;

记住最后delete掉new出来的空间。

  • new动态数组的格式
typeName *pointer_name = new typeName [num_elements];
...
delete [] pointer_name;

指针总结

  • 对指针的加减,表示指针所指位置的移动,移动距离根据指针类型变化相应字节数。
  • 数组名是数组第一个元素的地址。指针数组使用时直接将指针名当数组名使用即可。
  • new完一定要delete
  • 如果cout后给一个地址,它会一直打印到遇到空字符

new创造动态结构

  • 难点
    1.用new出来的是地址,地址是不能使用’.‘运算符来访问成员,需要使用’->'来访问
    2.可以利用(*pointername)在加点运算符。

自动存储、动态存储和静态存储

  1. 自动存储:存在于函数内,通常储存在栈(stock)中。
  2. 动态存储:存在于整个程序中
  3. 动态存储:可以叫做堆(heap),单独存在不受函数与程序生存周期影响。

猜你喜欢

转载自blog.csdn.net/baidu_29452653/article/details/85345518