复合类型
本篇博客仅作为笔记,如有侵权,请联系,立即删除(网上找博客学习,然后手记笔记,因纸质笔记不便保存,所以保存到网络笔记)
如图所示,C++复合类型大致可以分为以下几类:
数组类:两种赋值方法:索引和列表
1 //方法一:索引 2 int a[10]; 3 for(int i = 0; i < 10;++i){ 4 a[i] = i + 1; 5 } 6 //方法二:列表 7 int a[10] = {1,2,3,4,5,6,7,8,9,10};
vector类:模板类,存储在*存储区(堆)中,允许超界索引,拥有成员函数at()等特性,将在后续学习中具体学习。
array:存储在自动存储区(栈)中,允许超界索引。
字符串:
(1)char数组字符串
"string"是字符串常量,不是字符常量。只能赋给char数组和string类,不能赋值给char变量;
数组中默认值(多余部分)会用\0(空字符)填充。cout和cin输入输出时以\0作为结尾。数组长度 = 字符长度 + 1;
连起来的字符串常量会自动拼接起来,后一个的第一个字符取代前一个的最后一个字符:
strcpy(a,b,size); //将b字符串数组复制给a。
strcat(a,b,size); //将b字符串数组接在a后面。
(2)string类
支持赋值运算符 =,支持列表赋值法{ }进行赋值;
支持拼接和附加。
(3)字符串input
输入流(istream)和getline等函数的方式。
(4)结构体:
相当于声明一种全新的数据类型(自定义数据类型),与类类似,在C++中也可以看成一种类。
1 struct Student{ 2 int num; //声明一个整型变量num 3 char name[20]; //声明一个字符型数组name 4 char sex; //声明一个字符型变量sex 5 int age; //声明一个整型变量age 6 float score; //声明一个单精度变量 7 char addr[30]; //声明一个字符型数组addr 8 }
(5)枚举:
enum工具用于创建符号常量。
(6)指针
存储了一个值的内存地址。
声明typeName* pointname(*为解除引用运算符,对指针使用时返回其内存地址对应的值)
用&可以返回该值的内存地址,指针有三种赋值方法、
1 1、*haha = a; 2 2、int *pn; 3 pn = &a; 4 int *pt = &a; 5 3、int *pn = new int; 6 *pn = 1001;
注意:数组名也是一个指针,默认指向第一个元素的内存地址。
(7)内存分配:
1、栈内存。又叫自动存储内存,用于函数的私有作用域。函数结束时,栈内存中的存储值即消失。
2、静态储存。静态储存的变量可以在整个生命周期中拿到,因此要么就在函数体外定义它,要么就用static定义它。
(8)动态内存:
指针与new结合,提供了实现自动调整数组大小,自动创建复合类型的可能。
注意:为了防止内存泄漏,动态内存操作完后,一定要用delete释放内存。