技术交流QQ群:1027579432,欢迎你的加入! 
   1.cpp中的基本内置数据类型(7种) 
   -    bool char int float double void(无类型) wchar_t(宽字符型):typedef wchar_t short int;    
-    一个基本类型可以被一个或多个类型修饰符来修饰。       -      signed        
-      unsigned        
-      short        
-      long       
 
-    下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值(变量的大小会根据编译器和所使用的电脑而有所不同)
 
  2.typedef声明 
   -    使用typedef为已有的类型取一个新的名字,语法如下:   
格式:typedef type name;
例如:typedef int feet;  feet是int的另一个名称
     feet distance;  创建一个整型变量distance   -    typedef 可以声明各种类型名,但不能用来定义变量。用 typedef 可以声明数组类型、字符串类型,使用比较方便。    
-    用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。    
-    当在不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用 typedef 声明一些数据类型,把它们单独放在一个头文件中,然后在需要用到它们的文件中用 #include 命令把它们包含进来,以提高编程效率。    
-    使用 typedef 有利于程序的通用与移植。有时程序会依赖于硬件特性,用 typedef 便于移植。    
-    typedef 与 #define 的区别       -      2.1 执行时间不同           -        关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能。            
-        #define 则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查           
 typedef unsigned int UINT;
    void func(){
        UINT value = "abc";  // 类型检测,将会报错
        cout << value << endl;
    }
    //--------------------------------------------------------//
    #define f(x) x*x
    int main(){
        int a = 6, b = 2, c;
        c = f(a) / f(b);
        printf("%d\n", c);
        return 0;
    }
-      2.2 功能上的差异           -        typedef 用来定义类型的别名,定义与平台无关的数据类型,与 struct 的结合使用等。            
-        #define 不只是可以为类型取别名,还可以定义常量、变量、编译开关等。           
 
-      2.3 作用域不同           -        #define 没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。而 typedef 有自己的作用域。           
 // 宏的作用域
    void func1(){
        #define HW "helloworld"
    }
    void func2(){
        string str = HW;
        cout << str << endl;
    }
    // typedef的作用域
    void func3(){
        typedef unsigned int UINT;
    }
    void func4(){
        // UNIT uvalue = 5;  报错!
    }
    class A{
        typedef unsigned int UINT;
        UINT uvalueA;
        A(): uvalueA(0){}
    };
    class B{
        // UINT uvalueB;  报错
    };
    // 在B类中使用UINT会出错,因为UINT只在类A的作用域中。
    // 此外,在类中用typedef定义的类型别名还具有相应的访问权限
    class AA{
        typedef unsigned int UINT;
        UINT valueA;
        AA(): valueA(0){}
    };
    void func5(){
        // AA::UINT i = 1;报错,在typedef前加上public权限则可以
    }
-      2.4 对指针的操作----二者修饰指针类型时,作用不同 typedef int* pint;
    #define PINT int*
    int i1 = 1, i2 = 2;
    const pint p1 = &i1;  // 等价于int * const p;指针常量:指针p是一个常量,p不可更改,p指向的内容可以更改
    const PINT p2 = &i2;  // 等价于const int *p/int const *p,p可以更改,p指向的内容不可更改,常量指针
    pint s1, s2;  // s1 和 s2都是int类型指针
    PINT s3, s4;  // 相当于 int * s3, s4;只有一个是指针
    void TestPointer(){
        cout << "p1:" << p1 << " *p1 = " << *p1 << endl;
        // p1 = &i2; 指针常量p1不能被修改
        *p1 = 5;   // 但是p1指向的内容可以修改
        cout << "p1:" << p1 << " *p1 = " << *p1 << endl;
        cout << "p2:" << p2 << " *p2 = " << *p2 << endl;
        // *p2 = 5; 常量指针p2能被修改
        p2 = &i1;   // 但是p2指向的内容不可以修改
        cout << "p2:" << p2 << " *p2 = " << *p2 << endl;
    }
 
  3.枚举类型 
   -    枚举类型是cpp中的一种派生数据类型,是由用户定义的若干枚举常量的集合    
-    如果一个变量只有几种可能的值,可以定义为枚举类型。“枚举”就是将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。    
-    创建枚举,需要用到关键字enum,枚举类型的一般形式为:   
enum 枚举名{
    标识符[=整型常量];
    标识符[=整型常量];
    ....
    标识符[=整型常量];
} 枚举变量;   -    如果枚举没有初始化,即省略掉'=整型常数'时,则从第一个标识开始,如下面的例子,变量c的类型是color,最后被赋值为blue。   
enum color{
    red, green, blue
} c;
c = blue;   -    默认情况下,第一个名称的值是0,第二个名称的值是1,第三个名称的值是2,依次类推。可以在定义枚举类型时,对枚举元素赋值。此时,赋值的枚举值为所赋的值,而其他没有赋值的枚举值在为前一个枚举值加1,例如下面:   
enum color{
    red, greed = 5, blue
};
blue = 6,默认情况下,每个名称都会比前一个名称大,但red的值仍然是0.   4.相关代码 
 #include "iostream"
#include "string"
#include "limits"
#include "stdio.h"
using namespace std;
#define f(x)  x*x  // 宏定义
// 1 typedef执行时间不同
typedef unsigned int UINT;
void func(){
    // UINT value = "abc";  类型检测,将出错
    // cout << value << endl;
}
// 2 作用域不同
// 宏的作用域
void func1(){
    #define HW "helloworld"
}
void func2(){
    string str = HW;
    cout << str << endl;
}
// typedef的作用域
void func3(){
    typedef unsigned int UINT;
}
void func4(){
    // UNIT uvalue = 5;  报错!
}
class A{
    typedef unsigned int UINT;
    UINT uvalueA;
    A(): uvalueA(0){}
};
class B{
    // UINT uvalueB;  报错
};
// 在B类中使用UINT会出错,因为UINT只在类A的作用域中。
// 此外,在类中用typedef定义的类型别名还具有相应的访问权限
class AA{
    typedef unsigned int UINT;
    UINT valueA;
    AA(): valueA(0){}
};
void func5(){
    // AA::UINT i = 1;报错,在typedef前加上public权限则可以
}
// 3 对指针的操作---二者修饰指针类型时,作用不同
typedef int* pint;
#define PINT int*
int i1 = 1, i2 = 2;
const pint p1 = &i1;  // 等价于int * const p;指针常量:指针p是一个常量,p不可更改,p指向的内容可以更改
const PINT p2 = &i2;  // 等价于const int *p/int const *p,p可以更改,p指向的内容不可更改,常量指针
pint s1, s2;  // s1 和 s2都是int类型指针
PINT s3, s4;  // 相当于 int * s3, s4;只有一个是指针
void TestPointer(){
    cout << "p1:" << p1 << " *p1 = " << *p1 << endl;
    // p1 = &i2; 指针常量p1不能被修改
    *p1 = 5;   // 但是p1指向的内容可以修改
    cout << "p1:" << p1 << " *p1 = " << *p1 << endl;
    cout << "p2:" << p2 << " *p2 = " << *p2 << endl;
    // *p2 = 5; 常量指针p2能被修改
    p2 = &i1;   // 但是p2指向的内容不可以修改
    cout << "p2:" << p2 << " *p2 = " << *p2 << endl;
}
// 定义一个枚举类型
enum color{
    red, green, blue=5, yellow
};
int main(){
    cout << "bool: " << "所占字节数:" << sizeof(bool) << endl; 
    cout << "char: " << "所占字节数:" << sizeof(char) << endl;  
    cout << "signed char: " << "所占字节数:" << sizeof(signed char) << endl;  
    cout << "int: " << "所占的字节数: " << sizeof(int) << endl;
    cout << "unsigned int: " << "所占的字节数: " << sizeof(unsigned int) << endl;
    cout << "signed int: " << "所占的字节数: " << sizeof(signed int) << endl;
    cout << "short int: " << "所占的字节数: " << sizeof(short int) << endl;
    cout << "unsigned short int: " << "所占的字节数: " << sizeof(unsigned short int) << endl;
    cout << "signed short int: " << "所占的字节数: " << sizeof(signed short int) << endl;
    cout << "long int: " << "所占的字节数: " << sizeof(long int) << endl;
    cout << "signed long  int: " << "所占的字节数: " << sizeof(signed long int) << endl;
    cout << "unsigned long  int: " << "所占的字节数: " << sizeof(unsigned long int) << endl;
    cout << "float: " << "所占的字节数: " << sizeof(float) << endl;
    cout << "double: " << "所占的字节数: " << sizeof(double) << endl;
    cout << "long double: " << "所占的字节数: " << sizeof(long double) << endl;
    cout << "wchar_t: " << "所占的字节数: " << sizeof(wchar_t) << endl;
    typedef int feet;   // typedef声明,但typedef int feet = 100;错误!
    feet distance;
    // 1 宏定义执行时间不同
    int a = 6, b = 6, c;
    c = f(a) / f(b);
    printf("%d\n", c);
    TestPointer();
    cout << "red = " << red << " yellow = " << yellow << endl;
    // 枚举类型举例
    enum days{
        one, two, three
    }day;
    day = one;
    switch(day){
        case one:
            cout << "one" << endl;
            break;
        case two:
            cout << "two" << endl;
            break;
        default:
            cout << "默认输出" << endl;
            break;
    }
    return 0;
}