复合类型

定义:数组、字符串(char[],string)、结构体、共用体、枚举统称为符合类型。

一:数组

不必多讲,在此只注明几点

1:数组的初始化一般放在定义时,而之后不能对数组进行整个初始化,而只能通过

    下标操作来单个进行初始化工作。

2:不能将一个数组赋值给另外一个数组 a = b是不允许的。

3:在对数组进行初始化的时候,例如int a[10] = {9},那么后面的将被默认初始为0.

二:字符串

不多介绍,转优快云上的部分

char*   ss   =   "0123456789";   
sizeof(ss)           结果   4         ===》ss是指向字符串常量的字符指针   
sizeof(*ss)         结果   1         ===》*ss是第一个字符   
char   ss[]   =   "0123456789";   
sizeof(ss)           结果   11       ===》ss是数组,计算到/0位置,因此是10+1   
sizeof(*ss)         结果   1         ===》*ss是第一个字符   
char   ss[100]   =   "0123456789";   
sizeof(ss)           结果是100   ===》ss表示在内存中的大小   100×1   
strlen(ss)           结果是10     ===》strlen是个函数内部实现是用一个循环计算到/0为止之前   
int   ss[100]   =   "0123456789";   
sizeof(ss)           结果   400     ===》ss表示再内存中的大小   100×4   
strlen(ss)           错误             ===》strlen的参数只能是char*   且必须是以'/0'结尾的 

三:结构体

记住一种结构体,指定占用特定位数的结构成员,例如

struct str_test

{

          unsigned int i_test:4;

          unsigned int:4;

          bool b_test:1;

}

四:共用体:

共用体的声明为

union union_test

{

                int union_int;

                double union_double;

}

在此可以看到,结构体的声明与共用体差不多,但是意义上是有区别的,共用体虽然可以保存

不同类型的数据,但是一次只能保存一种类型的数据。例如

union my_union;

my_union.union_int = 4;//init union_int

my_union.union_double = 19.21;//init union_double,union_int not exists

如果某个变量将用来保存不同字段,但每次只能保存一种那么可以用到公用体。

五:枚举

enum spectrum{red,orange,yellow,green};

以上语句完成的工作有,一是声明spectrum 为美举型,二是将red,orange,yellow,green作为符号

常量,它们的值为0,1,2,3

枚举中的允许与不允许

spectrum band;

band = orange;//ok

band = 9;//invalid,9 is not a enum;

band = red + 1;//invalid,red + 1 is a int ,not a enum

++band;//invalid

band = red + orange;//invalid ,red + orange is a int

band = spectrum(3);//valid

enum的取值范围,找到enum中的最大值,然后找到大于这个最大值、最小的2^n - 1,则为上限,如果

enum的最大值为100,那么它的上线为128 - 1 = 127;对于下限,如果enum中的元素都不小于0,那么下

限为0,如果有负数存在,那么跟计算上线差不多,如果最小为-5,那么下限为-8 + 1 = -7.

六:指针和自由存储空间

1.计算机存储数据是必须跟踪的三个属性:信息存储的位置、信息的值、信息的数据类型。

2.指针的初始话是初始化指针而不是指针指向的值,所以下面的操作时危险的(在指针解引用操作前初始化指针)

   int* ipr_test;

   *ipr_test  =11;

3.一个指针数组的例子

  • int* p3 = new int[3];
  • p3[0] = 1;
  • p3[1] = 2;
  • p3[2] = 3;
  • p3 = p3 + 1;//允许,执行后p3[0] = 2,p3[1] = 3;
  • p3 = p3 - 1;//允许,还原p3的指向
  • delete [] p3;//有new操作一定要有delete 操作,new 有【】则delete 也有【】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值