C语言中的声明、定义、初始化
声明
变量声明规定了变量的类型和名字
基本形式
任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。
说明符(一个或多个) 声明表达式列表
变量声明
int a; unsigned int a;
函数声明
int max()
一个返回值为int类型的函数 指针声明
int *p
p是int*型
如果按上一句,p是int*类型,那么有意思的是为什么指针声明不是
int* a;
The syntax of the declaration for a variable mimics the syntax of expressions in which the variable might appear. 一个变量的声明语法模仿了该变量可能出现的表达式的语法。
也就是说,c语言在设计时,就是先想到了指针*p来表达一个内存地址上所有的值,然后才再有的其声明。 这导致了我们在一条语句中同时声明多个指针时,每一个的前面都要加上*
int *p,*q,*r;
定义
除了规定了变量的类型和名字外,还申请了存储空间,也可能会为变量赋一个初始值。 任何包含了显式初始化的声明即成为定义。
- 这么看来由第一条 int j; 它的意思就是声明并定义j了。 而 extern int j;//没有申请空间 声明j而非定义j。 extern int j = 5; 定义j而非声明j。
- 对于第二条,包含了显式初始化的声明 我们知道有文件作用域的全局变量声明时(也就是在所有函数体外声明的变量)会被默认初始化为0。 这种就不算是显式初始化了。 我们可以简单的理解为在声明中加上赋值。 int a = 3;
初始化
从上面来看就有两种:
- 变量创建时,给了它一个特定的值。
int a = 3;
- 默认初始化 在所有函数体外声明的变量会被默认初始化为0。
声明相当于普通的声明:它所说明的并非自身,而是描述其它地方创建的对象(对象指的是变量或者函数) 定义相当于特殊的声明:它为对象分配内存。
- 《C++ Primer》
- 《C陷阱与缺陷》
- 《C和指针》
- 《C专家编程》