// // main.c // typedef #include <stdio.h> /* 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 ", sumP(10 , 20)); functionPotinter minusP = minus; printf("minus = %i ", minusP(20, 10)); return 0; } // ----------------------------给指针起别名---------------------------- // String == char * typedef char * String; void test4() { // char *name = "lnj";,注意: 如果给指针起别名之后, 那么以后利用别名定义变量就不用再加*了 String name = "lnj"; printf("name = %s ", 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 == int typedef int Integer; typedef Integer myInt; // 可以给自定义的起别名 void test1() { int num = 10; printf("num = %i ", num); Integer age = 30; printf("age = %i ", age); myInt score = 99; printf("score = %i ", score); }
// // main.c // typedef和宏定义的区别 #include <stdio.h> typedef 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 ", num); myInt age = 30; printf("age = %i ", age); Integer score = 99; printf("score = %i ", score); char *name = "lnj"; printf("name = %s ", name); String name2 = "lmj"; printf("name2 = %s ", name2); MY_STRING name3 = "lk"; printf("name3 = %s ", name3); String name1, name2; name1 = "lnj"; name2 = "lmj"; printf("name1 = %s, name2 = %s ", name1, name2); //char *name3, name4; char *name3; char name4; 直接替换是会出问题的。 MY_STRING name3, name4; name3 = "lk"; name4 = "xb"; printf("name3 = %s, name4 = %s ", name3, name4); return 0; }