孔乙己学C语言(7)

本文详细解析了编程中变量的定义、声明、初始化与赋值的区别,并通过实例帮助理解这些概念的实际应用。

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

2.1 定义,声明,初始化,赋值的区别

问题描述:

定义,声明,初始化和赋值都是变量的基本操作,但是这几个概念很容易让一个初学者感到迷茫。尤其是在讲到变量的时候,定义和声明更是让人极容易混淆的一对概念。在我刚学习C语言的时候,一直错误的以为形如int i;就是声明,而形如int i=3就是定义。这种看上去很合理的分类方式一直误导了我很多年。

实例分析:

在一个程序中,通常仅仅是一个变量的存在性时的操作就是声明,就好像我们向仓库管理员提出了仓位使用的申请一样,这时虽然申请了,但是仓库管理员还没有为我们分配仓位。

与之区别的是定义,定义指的是我们向仓库管理员申请,仓库管理员也分配给我们了仓位。变量的这两个操作之间的区别就在于是否分配了内存空间。(与我们是否向内存空间进行操作无关)

int i=3这种方式一定分配了内存空间,因为内存空间已经保存了3这个整型值。但是是否int i这种方式编译器也为变量i分配了空间呢?

一个最好的办法就是看看变量i是不是有了地址,再看一下变量i在内存中是不是占了空间。下面给出一个例子:

/*example1_3_14.c*/

int _tmain(int argc, _TCHAR* argv[])

{

         int x;

         int y=3;

         printf("The address of x is %d,The size of x is%d\n",&x,sizeof(x));

         printf("The address of y is %d,The size of y is%d\n",&y,sizeof(y));

         return 0;

}

输出的结果为

The address of x is 1245024The size of x is 4

The address of y is 1245012The size of y is 4

可以看到xy两个变量都被分配了内存空间,x被分配了从1245024开始的4个字节。因此这两种方式都是定义。

那么变量的声明又是什么情况呢?

变量的声明通常只会出现在一种特殊的情形中:

有时我们在一个C文件中可能会用到另一个C文件中的变量,比如

/*file1.c---------定义的文件*/

float Pi

/*file2.c--------引用的文件*/
extern Pi

这里面file2中的Pi就是file1里面定义过的全局变量。这时的extern Pi就是一个声明,首先它向编译器说明了该变量的存在,其次,由于在file1里面已经为Pi分配过地址了,所以在这里不需要再次分配地址了。

那么extern Pi就是一个声明。

初始化和赋值就简单很多了,定义时同时给出变量的值,叫初始化。对于已定义好的变量,重新给出其值就是赋值。

Int x=1;这就是初始化。

x=5;对已经初始化过的x再次赋值

对于变量来说,定义的同时赋值就是初始化,以后值再次改变的话就是赋值。

 

总结

好的总结一下,所有变量的操作:

extern int x;声明

int y;声明并定义

int z=1;声明,定义,初始化。

z=100;赋值。

 

扩展:

函数的声明和定义相对变量要明显很多:

Float ComputeAreafloat x

{

Return PI*x*x

}

这就是定义,既给出了函数的名称,又给出了函数的实现。

有时,我们只需要指出函数是存在的,把具体的实现放在了最后,如:

Float ComputeArea(float x);

这样没有具体实现的函数就是声明。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值