//// main.c// typedef#include/* typedef可以给一个已知的数据类型起别名。 typedef 原有的数据类型 别名; 注意: 1. typedef不仅能给系统原有的数据类型起别名, 也可以给一个自定义的数据类型起别名 2. 利用typedef给数据类型起别名, 并不会生成一个新的数据类型, 仅仅是给原有的类型起了一个别名而已 */int sum(int v1, int v2){ return v1 + v2;}int minus(int v1, int v2){ return v1 - v2;}// 注意:如果是给指向函数的指针起别名,那么指向函数的指针的指针名称就是它的别名// functionPotinter == int(*functionPotinter)(int , int)typedef int(*functionPotinter)(int , int);int main(int argc, const char * argv[]) { // 9如何定义变量 : 数据类型 变量名称; int (*sumP)(int , int ) = sum; sumP = sum; int (*minusP)(int, int) = minus; minusP = minus; //--------------------------------------- functionPotinter sumP = sum; printf("sum = %i\n", sumP(10 , 20)); functionPotinter minusP = minus; printf("minus = %i\n", minusP(20, 10)); return 0;}// ----------------------------给指针起别名----------------------------// String == char *typedef char * String;void test4(){ // char *name = "lnj";,注意: 如果给指针起别名之后, 那么以后利用别名定义变量就不用再加*了 String name = "lnj"; printf("name = %s\n", name);}// ----------------------------给枚举类型起别名----------------------------// 1.先定义枚举类型, 再给枚举类型起别名 enum Gender //枚举类型的作用域:从定义枚举类型那行开始,到作用域结束。 { kGenderMale, kGenderFemale }; typedef enum Gender SEX; //enum Gender sex0; //SEX sex1 = kGenderMale; //SEX sex2 = kGenderFemale; // 2.定义枚举类型的同时给枚举类型起别名 typedef enum Gender { kGenderMale, kGenderFemale } SEX; // 3.定义枚举类型的同时给枚举类型起别名, 并且省略枚举原有类型名称typedef enum{ kGenderMale, kGenderFemale} SEX;void test3(){ // 给枚举起别名 enum Gender sex0; SEX sex1; sex1 = kGenderMale; /* 定义枚举变量有3种方式 1.先定义枚举类型, 再定义枚举变量 2.定义枚举类型的同时定义枚举变量 3.定义枚举类型的同时定义枚举变量, 并且省略枚举类型名称 */ enum Gender2 { kGenderMale2, kGenderFemale2 } sex2; sex2 = kGenderFemale2; enum { kGenderMale3, kGenderFemale3 } sex3; sex3 = kGenderFemale3; }// ----------------------------给结构体类型起别名----------------------------// 1.先定义结构体类型, 再给类型起别名 struct Person //结构体类型的作用域,从结构体类型定义的地方开始直到作用域结束。 { int age; double height; char *name; }; //struct Person sp1; //struct Person sp2; //struct Person sp3; //struct Person sp4; //struct Person sp5; typedef struct Person SPerson; //SPerson sp1; //SPerson sp2; //SPerson sp3; //SPerson sp4;// 2.定义结构体类型的同时, 给结构体类型起别名 typedef struct Person { int age; double height; char *name; } SPerson; //SPerson sp1; //SPerson sp2; //SPerson sp3; //SPerson sp4;// 3.定义结构体类型的同时, 给结构体类型起别名, 并且省略掉原有类型的名称 typedef struct { int age; double height; char *name; } SPerson; //SPerson sp1; //SPerson sp2; //SPerson sp3; //SPerson sp4; void test2(){ // 给构造类型起别名 struct Person { int age; double height; char *name; }; struct Person sp0; SPerson sp; SPerson sp1; SPerson sp2; SPerson sp3; SPerson sp4; /* 结构体变量的定义方式 1.先定义类型再定义变量 2.定义类型的同时定义变量 3.定义类型的同时定义变量, 并且省略类型名称 */}// ----------------------------给基本数据类型(int float doulbe char)起别名----------------------------// Integer == inttypedef int Integer; typedef Integer myInt; // 可以给自定义的起别名void test1(){ int num = 10; printf("num = %i\n", num); Integer age = 30; printf("age = %i\n", age); myInt score = 99; printf("score = %i\n", score);}
//// main.c// typedef和宏定义的区别#includetypedef int myInt;#define Integer int //把Integer用int替换,#define是编译的时候替换,typedef char * String;#define MY_STRING char *// 一般情况下如果要给数据类型起一个名称建议用typedef, 不要用define,int main(int argc, const char * argv[]) { int num = 10; printf("num = %i\n", num); myInt age = 30; printf("age = %i\n", age); Integer score = 99; printf("score = %i\n", score); char *name = "lnj"; printf("name = %s\n", name); String name2 = "lmj"; printf("name2 = %s\n", name2); MY_STRING name3 = "lk"; printf("name3 = %s\n", name3); String name1, name2; name1 = "lnj"; name2 = "lmj"; printf("name1 = %s, name2 = %s\n", name1, name2); //char *name3, name4; char *name3; char name4; 直接替换是会出问题的。 MY_STRING name3, name4; name3 = "lk"; name4 = "xb"; printf("name3 = %s, name4 = %s\n", name3, name4); return 0;}