数据(内存)——C语言变量的声明、定义、初始化

本文详细解析了C语言中声明、定义和初始化的概念。声明仅告知编译器变量的存在,不分配内存,而定义则会为变量分配内存。对于未初始化的基本数据类型,其值通常是任意的;枚举类型有默认值;指针默认为NULL;静态对象默认为0;const变量必须初始化。文章还举例说明了不同数据类型的默认值,并强调了初始化const变量的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:“我要用这个东西,但是还没用它,你不要给我申请内存空间”

①c这个变量已经在其他文件中定义过了,在这里声明“我要用”。

extern int c;   // 这是声明,不是定义

 ②结构体、联合体、类等构造数据类型以及枚举在进行抽象定义还未实例化的时候,即是在声明。

定义:“我现在就要用这个东西,你给我申请好内存空间”

关于“定义”这个概念的理解:

①任何对数据的定义都包含了声明;

定义的作用在于申请内存:任何数据在定义后就算不初始化也会分配内存空间,包括数组。

初始化:在定义对象的时候给对象赋值

未初始化的各种数据类型是什么值的问题并不重要,因为我们一般不会使用没有被初始化的对象,这并没有意义,以下是使用华为的cloudshell在Ubuntu20.04上对int、float、char、void*、static int、const int测试的情况:

 

通过以上的情况可以看到:

基本数据类型的默认值:

int、float、char这些基本数据类型在未初始化的时候其值是任意的;

bool类型在C语言中也是任意的,C++中专门提供了bool类型,我还不确定其未初始化的默认值是什么,无所谓,我们在实际编程中一定会初始化的;

枚举类型有其默认值:从0开始的整型。

指针的默认值:

NULL,这个全0的地址是在内存模型的保留区域,因为保留区域的地址值最低。

static对象的默认值:

0

const的默认值:

const int ci;   // 没有给ci初始化,ci有一个随机值,这个随机值已经作为ci的值了
ci = 333;   // 此时你再给ci赋值,会报错:error: assignment of read-only variable ‘ci’

根据上面,可见:如果我们想正确使用const,我们必须给ci初始化!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值