c++中常见的类型:
- 布尔类型(bool)
- 字符类型(比如: char)
- 整数类型(比如: int)
- 浮点类型(比如: double)
- 枚举类型(enum)
- 类型void
- 指针类型(比如: int*)
- 数组类型(比如: char[])
- 引用类型(比如: double&)
- 类和数据结构
我们将布尔,字符,整数称为整型
将整形和浮点称为算数类型
将枚举和类称为用户定义类型
此外有中常见的分发是:用户定义类型和内部类型(不是用户定义类型的都算)
(1)布尔型
bool,它的值是true或false.用于表示逻辑运算的结果
举例:
void f(int a, int b) {
bool bl = (a == b);
}//如果a,b相等, bl = true;如果不等, bl = false;
//bool常见的一个用法是作为检查某些条件是否成立的函数的返回结果类型
bool bigger(int a, int b) {
return a > b;
}//如果a > b, 返回true;反之,返回false;
//隐式的类型转换
//首先,按照定,true具有值1, false具有值0(也就是true可以转换为1, false可以转换为0)
//另外,非0的整数转换为true, 0转换为false
bool b = 2; //bool(2)是true, 所以等价于 bool b = true;
int i = true;//int(true)是1, 所以等价于 int i = 1;
bool x = 2 + 3;//bool(5)是true, 所以等价于 bool x = true;
需要注意的是指针也可以隐式转换到bool,非零指针转换为true, 空指针转为false
(2)字符类型
类型为char的变量可以保存具体实现的字符集里的一个字符.比如:
char ch = 'b';//注意是单引号!
每个字符常量有一个整数值(因为计算机只能存储0或1).比如,在ASCII字符集(有不同的字符集)里'b'的值就是98.这里有一个小程序,它可以告诉你,每个字符对应的整数值.
#includeint main() { char c; std::cin >> c;//从键盘输入c的值 std::cout << c << " 的值为: " << int(c) << std::endl; }
把char随意的转成一个整数会引发一个小问题,那就是char是有符号的还是无符号的?8个进制为(一般来说char就是8bit)可以表示0~255或者-127~128.而char到底属于哪种是由编译器来决定的.不过c++提供了signed char来表示-128~127;unsigned char来表示0~255.
(3)整数类型
和char一样,整数类型也有(int举例):int, signed int和 unsigned int.
此外整数还有大小,如:short int, int, long int.
short int 简写为 short; long int 简写为 long; signed int 简写为 signed;
unsigned int 简写为 unsigned;
与char不一样的是int总是表示为signed int.
整数字面值
3代表int, 3U代表unsigned int, 3L代表long型
(4)浮点类型
三种:float(单精度), double(双精度), long double(扩展精度)
浮点字面量
默认的类型为double,如1.2是double;1.2f或者1.2F这样写代表float型;
1.2l或者1.2L就是long double.
(5)void
没有类型为void的对象.void被用来刻画一个函数不返回值,或者被用作指向不明类型的对象的指针的基础类型.比如:
void x;//错误, 没有void对象 void f();//函数f不返回值 void* pv;//指针pv指向的对象的类型不明确
(6)枚举
一个枚举是一个类型,它可以保存由用户刻画的值.一但定义后,枚举的使用就像整型.
举例:
#includeenum { first, second }; //那么first = 0, second = 1;默认的情况下会从0开始顺序依次赋值 int main() { std::cout << first << std::endl;//直接像整型那样使用 }
#includeenum MyEnum { first = 1, second, third = 5, fourth };//那么second = 2, fourth = 6 void f(MyEnum key) {//key的类型是MyEnum(有点像结构体的感觉) switch (key) { case first: std::cout << "first : " << first << std::endl; break; case second: std::cout << "second : " << second << std::endl; break; default: break; } } int main() { f(second); }
需要注意的是enum中的所有变量是共用同一个内存.所以它只有一个int大小.
声明一个标识符能在c++程序使用之前必须声明(大部分情况下,是声明的同时也是定义)
需要注意是可以重复声明,但不能重复定义
举例:
int a; int a;//错误,重复定义 extern int a;//正确重复声明(extern在这里是声明关键字) extern short a;//错误,类型不匹配
声明结构
- 一个可选的描述符
- 一个基础类型
- 一个声明符
- 一个可选的初始式
char* kings[] = {"hello", "hhhhh"};
//char是基础类型
//* kings[]是声明符
//= {"hello", "hhhhh"}是初始式
//描述符,比如,extern, virtual它说明了被声明事物的某些非类型的属性
声明符由一个名字和可选的若干声明运算符组成,如
| * | 指针 | 前缀 |
| *const | 常量指针 | 前缀 |
| & | 引用 | 前缀 |
| [] | 数组 | 后缀 |
| () | 函数 | 后缀 |
后缀的约束性比前缀强,所以* kings[]是: *(kings[])这就代表指针数组(每个元素都是指针)
声明多个名字
int* p, x;//等价于int* p和int x(想想声明符的组成结构)
typedef
如果一个声明以typedef为前缀,它就是为这个类型声明了一个新名字.
typedef int MyInt; MyInt a = 10;//就相当于int a = 10;



