C++类型
#inlucde<iostream>
using namespace std;
int main(){
cout << "Hello World";
return 0;
}
复合类型
string类操作
- s1+s2 string类的合并,类似于数组字符串的strcpy()函数。
- s1+=s2 string加,类似于数组字符串的strcat()函数。
使用string读取字符串
- 读取一个单词时
cin >> str1; - 读取一行时
getline(cin,str1);
原始字符串,字符串中没有转义字符。
结构为
R"(—)" or R"+(—)+",其中+*可以是其他任意数量的字符(斜杠除外)
共用体union
用法:
union one4all{
int int_val;
long long_val;
double double_val;
};
可以将共用体匿名放置在结构体中:
struct widget{
char brand[20];
int type; //用来标记共用体成员使用情况
union{
long id_num;
char in_char[20];
};
};
widget prize;
//调用:
prize.id_num;
prize.id_char;
enum枚举
例:
enum spectrum{red,orange,yellow,green,bule,violet,indigo,utraviolet};
- 让spectrum成为新类型的名称;spectrum被称为枚举(enumeration)。
- 将red,orange,yellow等作为符号常量,他们对应整数值0~7。这些常量叫做枚举量
(enumerator)。
可以使用刚才的枚举名声明变量,变量只能取枚举量。枚举没有定义算数运算。枚举量
是整形,可以被提升为int类型,但是int类型不能自动转换为枚举类型。但是可以通过强制转换
使int变成枚举类型。
可以使用赋值运算符来显式地设置枚举量的值:
enum bits{one = 1,two = 2,four = 4,eight = 8};
其中指定的值必须是整数。可以创建多个值相同的枚举量。
指针和自由存储空间
&地址运算符
使用地址运算符&可以获取一个变量的地址。
*间接值(indirect value) or 解除引用(dereferencing)运算符
将其应用与指针,可以得到该地址处存储的值。
声明
int*p;
new分配内存
int *pn = new int;
数据对象:指为数据项分配的内存块。
变量也是数据对象,但是指针指向的内存不一定是变量。
delete释放内存
如果不释放内存,一直new新的内存地址,程序可能会因为内存不够用而终止。
int *pn = new int;
delete pn;
- delete只能释放使用new分配的内存,不能释放通过变量分配的内存
- 对于空指针,使用delete是安全的
- 对于同一块内存,不能连续使用两次delete,结果是未知的
使用new创建动态数组
int *pn = int [10];
delete [] pn;
两者必须都加上方括号,方可建立和释放动态数组。
int *p[3];
int(*q)[3];
p[0] = new int[3];
q = new int[1][3];
[]的优先级比*高,[]先与p结合,代表包含三个指针的数组
反之则是指向包含三个元素数组的指针
short tell[10];
cout << tell << endl;
cout << &tell << endl;
运行结果相同,但是前者代表的是2字节的地址,后者代表的是20字节的地址。
前者类型是 short* ,后者是 short *[10].
指针和字符串
略
自动存储
局部变量
静态存储
全局变量
static int static_A;
动态存储
new获取的内存空间
忘记delete内存,会造成内存泄漏,严重可能引起程序崩溃。
auto
const int *q[3];
auto p = q; // type(p) = const int *[3]