本章内容总结了声明,概述了结构体、函数声明、以及typedef等知识点。
C语言 | 快速了解C的发展史李
C语言 | 【耗费一夜总结三本C语言系列】之 指针、数组 一文透彻~~~李
C语言 | 【耗费一夜总结三本C语言系列】之 结构体、联合、枚举李
C语言 | 【耗费一夜总结三本C语言系列】之 声明李
C语言 | 【耗费一夜总结三本C语言系列】之 作用域 在也不用担心分不清变量的作用域拉!!!李
C语言 | 【耗费一夜总结三本C语言系列】之 编译步骤 会用C还不知道C如何编译???李
C语言 | 【耗费一夜总结三本C语言系列】之 数据类型总结李
C语言 | 【耗费一夜总结三本C语言系列】之 位及进制的用法李
文章目录
- 前言
- 一、声明的含义是什么?与定义有什么区别?
- 1.1 声明常使用的关键字
- 二、几种声明
- 2.1 函数声明
- 2.1.1 几种常见的函数声明
- 2.2 结构体声明
- 2.3 typedef
- 2.3.1 typdef与#define的区别
1.1 声明常使用的关键字声明是为了提前告知编译器该变量或者该函数类型已被预定,故需要遵循编译器的语法;
- 需注意,声明与定义可以说是俩回事。定义时,则编译器会为其分配内存,而声明只是单纯的声明某个变量或类型;
- 声明不需要分配内存,但该声明的名字已在内存上;
- 声明能够多次,而定义只能一次。
二、几种声明
- const;
- volatile;
- typedef。
2.1 函数声明
- 函数声明;
- 结构体声明;
- 联合声明;
- 枚举声明;
- 指针与数组声明;
2.1.1 几种常见的函数声明函数声明常与typedef结合,一般用于较复杂的函数指针及参数、返回值;
函数返回值类型 (* 指针变量名) (函数参数列表);
以下几种根据以上的公式进行扩展使用。
普通函数指针
// 普通的指针声明,参数为int类型 int (*func)(int);
返回函数指针
// 返回一个函数指针,参数为int类型 int (*func1(int i))(); # 进行拆分 (*func1(int i))、int()(); # --- # (*func1):为指针变量名 # (int i):为参数列表 # int ()():返回一个函数指针
返回一个指向数组的指针
// 返回一个函数数组,参数为int类型 int (*func2(int x))[]; # 进行拆分 (*func2(int x))、int ()[] # --- # (*func2):为指针变量名 # (int x):为参数列表 # int ()[]:返回一个函数数组
函数数组
// 定义一个函数数组,存储的函数返回值为int类型,参数也int类型
int ((*func3[])(int x));
# 进行拆分
(*func3[])、int()、(int x)
# ---
# (*func3[]):为函数指针数组
# (int x):为参数列表
# int():返回值为int类型
// 定义一个函数数组
typedef int(*f)(int x, int y);
int test(int x, int y){
printf("");
}
f num[100] = {
test
};
2.2 结构体声明
struct 结构标签(可选){
int i,
}变量定义;
2.3 typedef
- 变量的申明与类型的声明应分开;
- 尽量少用typdef在结构体上,声明带上strutc在阅读上回更加直观;
- 若数组在结构体中进行传参,则不会传入数组首地址,是传值操作;
使用typdef将会给该类型创建一个新标签,但不会为其分配空间。
- 类似于宏文本替换,但与宏的区别所在与它并不会引入新类型。
- 不能使用,进行多个声明;
- typedef不能嵌套在中间部分;
typedef的使用
#include2.3.1 typdef与#define的区别#include typedef void (*func)(int); func test(int x){ static int y = x; printf("test typedef: %dn", x); return NULL; } void main() { int x = 1; test(x); system("pause"); }
- 两者类似,但typedef不会引入新类型;
- typedef声明厚不能拓展,而define却可以再次更改其属性;
- typedef声明可保证均为同一属性;
typedef int * dataType; dataType x, y; // x和y都为int类型 #define dataType int *; dataType x, y; // 由于#define为宏替换,则表达式变为int *x, y;故x为整型指针,y为整型



