4.1 array 数组
- 数组可以不初始化,如
int num[5];
- 但是如果要使用数组,必须对其进行初始化
- 未初始化的数组,里面的数值是随机的
- 若数组值未全部初始化,则
其余的值为 0
- 数组一旦申请完,其元素个数不可以更改
- 即数组有固定数量的对象
- 但是如果要使用数组,必须对其进行初始化
- unknown size 未知长度的数组
int num[]
- 通过初试化列表的长度来决定数组的长度
- 或用于函数的参数中,数组长度未知
- c/C++中数组没有越界检查
- 即若数组越界,不会报警告或错误
- 优点是效率高,缺点是程序容易出错
- 多维数组
- 二维数组
int mat[2][3]= {{1,2,3},{4,5,6}};
- 遍历二维数组需要双重循环
- 二维数组
- const array 常量数组
- 数组元素值不可修改,只能在初始化时赋值
- 常用于函数中,防止数组元素被修改
4.2 strings
- 类型
- 数组字符串 array-style strings
- string 类 string class
- 数组字符串
- 元素类型为 char
- 初始化为
char rabbit[16] = {‘ char型’,‘a’ }
- 字符串的结束标志为 null 即
\0
- 不加 0 来结束字符串,可能会产生和其他字符串混乱的越界问题
- 若越界严重会被操作系统杀死
- string literals 常量字符串
- 初始化为
char name[] = " 一段字符串内容 "
- 注意,常量字符串的长度为内容长度+1
- 因为数组中最后会存储一个
\0
- 因为数组中最后会存储一个
- 初始化为
- 字符串的操作和检验 string manipulation and examination
- copy 拷贝操作
char* strcpy (char* dest,const char* src)
- 将 src 数组中的所有元素拷贝到 dest 中
- 目标数组 dest 可能容量不够,造成越界和溢出
- 安全的拷贝操作
char* strncpy (char* dest,const char* src,size_t count)
- count 值为最多拷贝的元素数量
- concatenate 字符串的链接
char* strcat(char* dest, const char src)
- compare 字符串的比较
int strcmp(const char *lhs,const char *rhs)
- 前大后小会返回正值,前小后大会返回负值
- 一般为首字母的排位相减的值
- copy 拷贝操作
- string 类 class
std::string str1 = “hello”
- 更方便
std::string result = str1 + "," + str2
- 可以无需调用 strcat 直接连接字符串
- string 类也没有越界检查
4.3 结构体、连接体和枚举类型 structures ,unions and enumerations
- 结构体
- 一种新的数据类型,其中的数据成员会顺序存储在结构体内
struct Student{
char name[4];
int born;
bool male;
};
- 定义结构体后可用于声明变量
- 如
struct Student stu
;- 声明了一个 Student 类型的结构体 stu
- 必须加上 struct 这个 tag
- 也可通过
struct Student stu = {"", , }
来初始化
- 声明了一个 Student 类型的结构体 stu
- 引用变量通过
stu.name stu.born stu.male
- 基于边界对其的存储方式,会导致结构体的变量顺序不同,从而有可能结构体的占用 size 不同
- 如
注意:在 c++中,可以不使用 struct 标签声明变量
- 但是若在 c 语言中,会编译不通过
- 可以将结构体声明改为
struct Student{} Student ;
- c++中的结构体和类是一样的,但是 c 中不同
- 联合体 union
- union 的定义与结构体一样
union ipv4addres{
std::uint32_t address32;
std::uint8_t address8[4];
};
- 联合体与结构体的区别
- 联合体 union 的成员变量共享同一个内存
- 即首地址完全相同
- 其大小以其中最大的变量为准
- 满足是所有成员的整数倍
- ==本质上即为同一个数据有不同的名字==
- 联合体 union 的成员变量共享同一个内存
- 枚举类型 enum
- 用于替换 const 常量类型
- 定义为
enum color {white,black,numcolors}
- 分别为 0,1,2
- 即 numcolors 可以直接表示出颜色为 2
- 分别为 0,1,2
- 引用 enum
enum color pen = black;
- 或
pen = color(1);
- 枚举类型不可以做算术运算
- 可以转换成 int 型后做算术运算
4.4 typedef
- typedef 用来创建一个类型的别名
- 如
typedef int myint;
- 创建后可通过 myint 来定义 int 变量
- 如
typedef undesigned char vec3b[3]
- 定义为有三个元素的字符组
- 如
Comments 9 条评论
这是一条私密评论
这是一条私密评论
这是一条私密评论
这是一条私密评论
这是一条私密评论
这是一条私密评论
这是一条私密评论
这是一条私密评论
这是一条私密评论