C语言基础知识手册(二)——变量、常量、声明


前言

  本手册是在学习过C语言的情况下,复习C语言使用的。如果帮助到大家,实属荣幸,如果有不足之处大家也可以在评论中提出来,互相学习互相增长,谢谢大家。

1.变量

  一种存储单元,在C程序在执行过程中临时存储数据,在未初始化的情况下会被赋予一个随机值。常见的声明变量如:

int a;
char b = 'x';
float c = 2.5;

  一般我们将声明在主函数之外的变量称为全局变量,声明在主函数之内的变量称为局部变量。

2.常量

  多指存在于代码中的内容固定的一种类型的数值,多以文本的形式出现,而不是读、写或计算出来的数。简单来说,即一开始确定好的,并不会改变的一种值。某些常量如果对其修改可能会报错或引起严重的后果。常见的常量声明如:

//声明一个字符串常量
char* p = "hello man";

  后续还会介绍一种常量,是通过宏定义声明的。

3.声明

  “定义变量是件很容易的事,但想时时刻刻控制他很难。” 没错,如何控制好变量是一件很重要的事,声明就起到了很重要的作用。

 3.1-类型指定符

  我们普通的变量的声明,比如“int a;……”等等,告诉了计算机变量的类型,“int、float、void、char……”等数据类型的名字,称为类型指定符,他们的作用就是声明变量或常量的类型。

 3.2-类型限定符

  见名知意,对一种类型的变量做出某些限制的声明。对于C语言基础知识,这里我们只介绍一种类型限定符const。

  3.2.1-const

  使用const声明的变量,之后不能被改变,做参数也是。
  语法规则:const int a;
  对于指针类型
  当使用const声明指针变量时,其位置不同,可修改的内容也是不同的。 比如:
   int* const a; 中的a是不可变的,即指向不可变。*a可变,即指向的内容可变。
  const int *b; 、 int const *b; 中的b是可以改变的,即指向可变。*b不可变,即指向的变量不可变。

 3.3-存储类型

  针对变量及小范围函数的作用域、存储期、链接这三种性质进行声明。下面只介绍auto、static、extern三种存储类型。

  3.3.1-三性质

  存储期: 见名知意,即变量从获得内存到释放内存的期间,也称生存周期。存储期有静态存储期、自动存储期。自动存储期指,在某一限定范围内(比如某个函数内)声明的变量在该范围生效时获得内存单元,在该范围失效时释放内存单元。静态存储期指,在程序运行期间占有同一个存储单元。
  作用域: 见名知意,即能够通过名字引用变量的范围。作用域有文件作用域、块作用域。文件作用域表示该变量从声明处至文件末尾都是可用的,块作用域表示,该变量从声明处至块末尾都是可用的。(这里的块就是一个限定的区域,比如一个函数内)
  链接: 确定了程序的不同部分可以通过变量名字共享此变量的范围。链接有内部链接、外部链接、无连接。内部链接指,该变量只能本文件内使用。外部链接指,该变量可以被程序中的几个或全部文件共享。无连接指,只属于某一块,根本不能被共享。

  3.3.2-auto

  默认的未填写存储类型的变量的存储类型为auto型。当作用于局部变量,其三性质为自动存储期、块作用域、无连接。当作用于全局变量,其三性质为静态存储期、文件作用域、外部链接。

int x;

void fun1()
{
  int z;
}

  3.3.3-static

  静态存储类型,当使用static作用于局部变量时,其三性质为静态存储期、块作用域、无连接。当作用于全局变量时,其三性质为静态存储期、文件作用域、内部链接。

static int x;

void fun1()
{
  static int z;
}

  3.3.4-extern

  extern的作用是使多个源文件可以共享被修饰的变量。当使用extern作用于局部变量时,其三性质只能确定为静态存储期、块作用域。当作用于全局变量时,其三性质只能确定为静态存储期、文件作用域。
  对于其修饰后的变量的链接性质,如果在较靠前的位置(任何函数定义的外部)声明,其具有内部链接,否则具有外部链接。

extern int x;

void fun1()
{
  extern int z;
}

  3.3.5-函数的存储类型

  与变量不同,对于函数的存储类型的效果,我们只考虑三性质中的链接。
  对于不写存储类型声明(默认)extern其含有外部链接,而使用static声明的含有内部链接。
  这么一来,使用static修饰函数就有一定的好处:一是更容易维护,即修改该函数,不会对其他文件有影响;二是减少了“名字空间污染”,即不会与其他文件中的同名函数或变量起冲突。(面试小考点哦!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值