C语言数据结构拦路虎-变量与内存

这篇文章不错:https://blog.csdn.net/wangjun_huster/article/details/69486956

1、变量

C语言的规则是:变量必须先定义才能使用。对变量的定义其实就是请求计算机,让计算机将内存中的某个或几个单元分配给你定义的变量使用。

把地址为2000的内存单元,起个名字叫“i”,怎么知道变量的地址值呢用&i。

我又想到指针了,*a,a放的就是地址值。a=&i,*a我就能取到i的值了,也就是内存地址为2000单元的值了。

常量

在程序中,你怎么弄都不会变的值

分类:

1.const   int   a=10;
但是这里的a实质上还是一个变量,只不过是给a赋予了常量的属性
所以不能 const   int   a=10;
          int  arr[a]; //数组的大小不能定义成变量

2.字面常量        
平时见到的1,’w‘等,可以直接使用的都叫作字面常量

3.#define 定义的标识符常量 例如:#define M 100
要注意的是程序运行时,程序中所有M都被换成100来执行,程序中是不存在M的,所以可以执行 int   arr[M]

4.枚举常量  enum
生活中的还有些东西是可以一 一列举出来的比如性别 ,血型,所以可以定义为枚举类型
               enum   Sex   //enum Sex是枚举类型
               {
               MALE,
               FEMALE,
               SECRET                 //这些叫做枚举常量,值是从0开始递增
                }
枚举的使用
 enum   Sex  sex = MALE; 
 

2、数据类型

数据类型的定义则可以确定计算机给该变量分配多大的内存。不同规范的C语言有不同规定,一般,int  2字节,char 4字节吧

 

1.生命周期

变量的生命周期,也称生存期,是指变量值保留的期限。按照生命周期,可将变量分为两类:静态变量和动态变量。

静态变量:变量存储在内存中的静态存储区,在编译时就分配了存储空间,在整个程序运行期间,该变量占有固定的存储单元,变量的值都始终存在,程序结束后,这部分空间才释放。这类变量的生存期为整个程序。

动态变量:变量存储在内存中的动态存储区,在程序运行过程中,只有当变量所在函数被调用时,编译系统才临时为该变量分配一段内存单元,该变量才有值,函数调用结束,变量值立即消失,这部分空间释放。我们说这类变量的生存期仅在函数调用期间

2.作用域

变量的作用域也称为可见性,指变量的有效范围,可分为局部和全局两种。

局部变量:在一个函数或复合语句内定义的变量是局部变量,局部变量仅在定义它的函数或复合语句内有效。

全局变量:定义在所有函数之外的变量是全局变量,作用范围是从定义开始,到本文件或程序结束。

3.C语言变量

C语言中的变量有:自动变量、寄存器变量、外部变量、内部静态变量和外部静态变量。下面分别就这几个变量进行简单说明。

 

C语言中extern的用法

转载链接:https://www.cnblogs.com/dushikang/p/8532804.html

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。 

使用extern关键字来声明变量为外部变量。具体说就是在其中一个c文件中定义一个全局变量key,然后在另一个要使用key这个变量的c文件中使用extern关键字声明一次,说明这个变量为外部变量,是在其他的c文件中定义的全局变量。请注意我这里的用词:定义和声明。例如在main.c文件中定义变量key,在common.c文件中声明key变量为外部变量,这样这两个文件中就能共享

1. extern修饰变量的声明。 

举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像extern声明只能用于文件作用域似的。 

 

2. extern修饰函数声明。从本质上来讲,变量和函数没有区别。函数名是指向函数二进制块开头处的指针。如果文件a.c需要引用b.c中的函数,比如在b.c中原型是int fun(int mu),那么就可以在a.c中声明extern int fun(int mu),然后就能使用fun来做任何事情。就像变量的声明一样,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的文件作用域的范围中。对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。 

使用extern和包含头文件来引用函数有什么区别呢?extern的引用方式比包含头文件要简洁得多!extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这大概是KISS原则的一种体现吧!这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值