目录
1.C++基本数据类型
所以 wchar_t 实际上的空间是和 short int 一样。
2.typedef 声明
typedef type newname; 就是换个名字而已。。。
关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能。
#define 则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查
#define 没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。而 typedef 有自己的作用域。
注意:define是简单的文本替换,也就是说这并没有你想的那么好用比如说
#include<stdio.h>
#define add(a,b) a*b
#define add1(a,b) (a)*(b)
int main (void)
{
printf ("%d\n",add(1,2)); //2
printf ("%d\n",add(1+2,2+3)); //8
printf ("%d\n",add1(1+2,2+3)); //15
}
关于 typedef 的几点说明:
- typedef 可以声明各种类型名,但不能用来定义变量。用 typedef 可以声明数组类型、字符串类型,使用比较方便。
- 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。
- 当在不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用 typedef 声明一些数据类型,把它们单独放在一个头文件中,然后在需要用到它们的文件中用 #include 命令把它们包含进来,以提高编程效率。
- 使用 typedef 有利于程序的通用与移植。有时程序会依赖于硬件特性,用 typedef 便于移植
3.枚举类型
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 "blue"。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。
enum color { red, green=5, blue };
在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0
## 枚举类型不一定要在 main 中定义:
#include <iostream>
using namespace std;
enum time
{
first,second,
third,forth,fifth
};
int main()
{
enum time a=fifth;
if (a==fifth)
{
cout << "Succeed!";
}
return 0;
}
为了方便枚举的使用,应该和 typedef 结合使用,例如:
typedef enum BAYER_PATTERN{
BAYER_RG=0,
BAYER_BG,
BAYER_GR,
BAYER_GB
}BAYER_PATTERN;
使用的时候就不用再 enum BAYER_PATTERN color = BAYER_RG; 了,而可以直接用:
BAYER_PATTERN color = BAYER_RG;
4.extern 关键字声明在变量和函数之前的说明。
1、作用在变量之前
变量只允许定义一次,但可以在多个文件中声明。
2、作用在函数之前
extern void Fun(); // 函数声明,extern 用于标识此函数为外部可调用函数
5.初始化局部变量和全局变量
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
6.宏定义 #define 和常量 const 的区别
类型和安全检查不同
宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;
const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查
编译器处理不同
宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期;
const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据
存储方式不同
宏定义是直接替换,不会分配内存,存储与程序的代码段中;
const常量需要进行内存分配,存储与程序的数据段中
#define定义以后取消
void f1()
{
#define N 12
const int n = 12;
#undef N //取消宏定义后,即使在f1函数中,N也无效了
#define N 21//取消后可以重新定义
}
7.运算符