typedef
typedef 原有数据类型 新的数据类型;1、别名的基础还可以再起别名
1、基本数据类型
2、结构体
3、枚举
4、指针
5、函数指针
给基本数据类型起别名
void test(){
typedef int Integer;
Integer num = 10;
printf("%d\n",num);
typedef Integer Int;
Int n = 20;
printf("%d\n",n);
}
/**
* 给结构体类型起一个别名
*/
void testForStruct(){
// 先定义结构体,然后再给结构体起一个别名
struct Person{
int age;
char *name;
};
struct Person p = {10,"xiaoming"};
typedef struct Person PersonType;
PersonType pp = {20,"xiaoma"};
printf("age = %d,name = %s\n",pp.age,pp.name);
//定义结构体类型的同时,给它起一个别名
typedef struct _Point{
int x;
int y;
} Point;
Point point = {1,1};
//定义匿名的结构体类型的同时,起一个别名
typedef struct{
int width;
int height;
} Size;
Size size = {4,6};
}
/**
* 给枚举类型起别名
*/
void testForEnum(){
//给枚举类型起别名
//先定义枚举类型,然后再起一个别名
/*
enum Sex{
Man,
Woman,
Other
};
enum Sex m = Man;
typedef enum Sex Sex1;
Sex1 s = Woman;
printf("%d\n",s);
*/
// 定义枚举类型的同时给它起一个别名
// typedef enum _Sex{
// Man,
// Woman,
// Other
// } Sex;
//
// Sex m = Other;
// 定义匿名枚举类的同时,给它起一个别名
typedef enum {
Man,
Woman,
Other
} Sex;
Sex m = Man;
}
//给函数指针类型其别名
int sum(int num1,int num2){
return num1 + num2;
}
typedef int (*MethodPointer)(int,int);
int main(int argc, const char * argv[]){
MethodPointer minu = minus;
int result = minu(20,10);
printf("result = %d\n",result);
return 0;
}
static与extern对函数作用
/*外部函数:可以在本文件和其他文件中访问的函数我们成为外部函数
内部函数:只能在本文件中被访问的函数
extern:
完整定义一个外部函数
完整声明一个外部函数
static:
定义一个内部函数
声明一个内部函数
1、内部函数在不同文件中是可以有同名的
2、外部函数在不同文件中不可以有重名的函数定义
*/
static与extern对全局变量的作用
/*全局变量:
外部变量:可以在本文件中和其他文件中访问变量
内部变量:只能在本文件中被访问变量
extern:完整的定义一个外部变量
完整的声明一个外部变量
static:定义一个内部变量
声明一个内部变量
注意点:使用extren声明变量,那么系统不会自动为我们定义一个同名同类型变量
*/
satic 与 extern对局部变量作用
1、不可以在局部变量定义并初始化时候加extern2、extern用在函数内部是对全局变量声明
3、static延长了局部变量的声明周期,但是并没改变它作用域
4、不管定义并初始化的语句被调用多少,它都只执行一次