“这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战”
【1】c语言中typedef的用法
typedef:类型重定义
📑eg1:
-
typedef int a;//原来a是变量,加上typedef此时a就变成了int类型 -
a b;//定义了b的变量,b变量的类型就是int
📑eg2:
typedef int *p; //原来的p只指针变量,而加上typedef之后
//变成了int *的类型。
p t,q; //定义了t和q的两个指针
📑eg3:
typedef char a[10]; //a代表的是char [10];
a w; //定义了有10个元素的成员都是char类型的数组
📑eg4:
typedef int (*fun)(int ,int); //fun是int(*)(int,int)的类型
fun ttt; //定义了ttt的函数指针
#include <stdio.h>
typedef int (*fun)(int ,int);
//fun ===>int (*)(int,int)
//fun它是一个类型,它是新定义的类型,类似int
int add(int a,int b)
{
return (a+b);
}
int sub(int a,int b)
{
return (a-b);
}
void show(int a,int b,int (*func)(int a,int b))
{
printf("sum = %d\n",func(a,b));
}
//showw:它是一个函数
//函数的参数,int a,int b,fun func;
//fun:类型 func 这个类型的变量
//
//函数的返回值:fun===>int(*)(int,int)的类型
fun showw(int a,int b,fun func)
{
//func--->sub,调用func(a,b),就相当于
//在执行sub(a,b),并把它的结果通过
//printf打印出来。
printf("sum = %d\n",func(a,b));
return func;
}
int main(int argc, const char *argv[])
{
fun ww;
//使用fun类型定义了ww的变量
//show(100,200,add);
//show(100,200,sub);
//ww接收showw函数的返回值
//ww--->func--->sub
ww = showw(100,200,sub);
//由于ww指向的是sub函数,所有ww(100,200),
//就相当于在执行sub(100,200),并把它的结果打印出来
printf("=== %d\n",ww(100,200));
return 0;
}
【2】c语言中define的用法
用法1:
#define M 5 //函数以后在使用M的时候,代表的使用的是5
用法2:
#inlcude <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
int main()
{
pirntf("%d",NUM); //结果是8,宏只是简单的字符串替换
} //如果想让define表达式的结果和预想的
//一样,需要在define后加括号
用法3:
#define MAX(a,b) ((a)>(b)?(a):(b))
宏的函数是求a和b中的最大值
printf("Max = %d\n",MAX(100,200)); ===>结果是200
用法4:
#define PRINT_MSG(msg) do{\
printf("%s",msg);\
return -1;\
}while(0)
在宏中如果需要写多条语句,就可以使用do{}while(0) do{}while(0) 不会有返回值的。 int a = PRINT_MSG(msg); 错误
用法5:
#define MAX(a,b) ({ \
int max; \
if(a>b) \
max=a; \
else \
max=b;\
max;\//===>注意这里不能用return
})
☞在宏中使用({}) ,里面可以写多条语句,宏的最后一句话的结果是宏的返回值。
#define ADD(a,b) ({ \
a+b; \
})
📌宏是简单的字符串替换,牺牲了空间,换来了程序执行的效率
用法6:
宏中的一个#作用 #define S(n) #n ===>字符串化,将整数转化为字符串 printf("%s\n",S(5777));
用法7:
宏中两个##作用
#define NAME(a,b) a##b ===>字符串拼接
char *hello = "hello world";
printf("%s\n",NAME(h,ello));
===>NAME(h,ello)===>拼接成hello
===>打印hello的时候就能看到
"helloworld"
【3】typedef和define的区别
- typedef参与编译,而define是在预处理阶段完成的简单的字符串替换
- typedef是类型的重定义,而define是字符串的替换
- typedef后需要加;,而define后不需要加;
- define前有#符号,而typedef前是没有# 常见的考法
typedef int* INTP;
INTP b,c; //定义了b和c的两个指针变量
#define INTP int *
INTP b,c; //定义了b的int类型指针,和c的int类型的变量
int *b,c;