C语言中的声明、定义、初始化

声明

变量声明规定了变量的类型和名字1

基本形式

任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。2

说明符(一个或多个) 声明表达式列表3

变量声明

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;

定义

  1. 除了规定了变量的类型和名字外,还申请了存储空间,也可能会为变量赋一个初始值。
  2. 任何包含了显式初始化的声明即成为定义。1
  1. 这么看来由第一条

    int j;
    

    它的意思就是声明并定义j了。

    extern int j;//没有申请空间
    

    声明j而非定义j

    extern int j = 5;
    

    定义j而非声明j

  2. 对于第二条,包含了显式初始化的声明
    我们知道有文件作用域的全局变量声明时(也就是在所有函数体外声明的变量)4会被默认初始化为0。
    这种就不算是显式初始化了。

    我们可以简单的理解为在声明中加上赋值。

    int a = 3; 
    

初始化

从上面来看就有两种:

  1. 变量创建时,给了它一个特定的值。
int a = 3;
  1. 默认初始化
    在所有函数体外声明的变量会被默认初始化为0。
名称区别作用
定义只能出现在一个地方确定对象类型并分配内存,用于创建新的对象 int array[]
声明可以多次出现描述对象的类型,用于指代其彵地方定义的对象。extern int array[]
  1. 声明相当于普通的声明:它所说明的并非自身,而是描述其它地方创建的对象(对象指的是变量或者函数)
  2. 定义相当于特殊的声明:它为对象分配内存。5

  1. 《C++ Primer》 ↩︎ ↩︎

  2. 《C陷阱与缺陷》 ↩︎

  3. 《C和指针》 ↩︎

  4. 存储类别与链接 ↩︎

  5. 《C专家编程》 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CCPigSnail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值