C语言基础——变量、常量及标识符

目录

变量:

        定义:

        时间角度

        空间角度

        自动变量(auto)

        外部变量(extern)

        静态变量(static)

        寄存器变量(register)

常量:

标识符:

标识符规则:


变量:

        定义:

        指在程序运行时其值可以改变的量,起存储数据的功能

        在C语言中,变量是对程序中数据所占内存空间的一种抽象定义,定义变量时,用户定义变量的名、变量的类型,这些都是变量的操作属性,不仅可以通过变量名访问该变量,系统还通过该标识符确定变量在内存中的位置

        在计算机中,保存变量当前值的存储单元有两类,一类是内存,另一类是CPU的寄存器。变量的存储类型关系到变量的存储位置,C语言中定义了4种存储属性,即自动变量(auto)外部变量(extern)静态变量(static)寄存器变量(register),它关系到变量在内存中的存放位置,由此决定了变量的保留时间和变量的作用范围。

        时间角度

        变量的保留时间又称为生存期,从时间角度,可将变量分为静态存储动态存储两种情况

        静态变量

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

        动态变量

        指变量存储在内存的动态存储区,在程序的运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该变量分配一段内存单元,函数调用结束,该变量空间释放,变量的值只在函数调用期存在

        空间角度

        变量的作用范围又称为作用域,从空间角度,可以将变量分为全局变量局部变量

        全局变量

        在函数之外定义的变量,其作用范围为从定义处开始到本文件结束,编译时,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定单元

        局部变量

        在自动变量(auto)自动变量(auto)自动变量(auto)一个函数或复合语句内定义的变量,它仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,而是在程序运行过程中,当局部变量所在的函数被调用时,编译系统根据需要,临时分配内存,调用结束,空间释放

        自动变量(auto)

        函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量)都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间,这类局部变量称为自动变量

                                                        使用auto进行声明

        外部变量(extern)

        即全局变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾

        如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件末尾。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量进行“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量

        通常的,用extern声明外部变量,扩展程序文件中的作用域

        静态变量(static)

        函数中的局部变量的值在函数调用结束后不消失而保留原值

        通过用static类型声明后的变量,其变量的内存空间位于内存的全局静态区,仅会初始化一次

 

        这个结果的原因在于,每次a的值是接着上一次函数调用的值继续运算的,并非每次都初始化从5开始计算,这就是static的特性

        未使用static:

        未使用static,每次都是从 a = 5 开始计算

        寄存器变量(register)

        为提高效率,C语言允许将局部变量的值存放在CPU的寄存器中,这种变量叫做寄存器变量,用关键字register声明

        使用寄存器变量需要注意以下几点:

        (1)只有局部自动变量和形式参数可以作为寄存器变量

        (2)一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量

        (3)不能使用取地址运算符“&”求寄存器变量的地址

        在C语言发展迭代的今天,当我们尝试用regiter声明一个变量时,编译器很可能会根据情况,把"register"忽略掉,需要大家知晓这一情况

常量:

指在程序运行时其值不变的量,常量不占内存,在程序运行时它作为操作对象直接出现在运算器的各种寄存器中

#include <stdio.h>
int mian()
{
        int  year;
        year  =  2023;
        printf("welcome to C's word!\n");
        return 0;
}

变量:year 常量:2023

标识符:

        在程序中使用的变量名、函数名、标号等统称为标识符标识符只能是由字母(A~Z、a~z)、数字(0~9)、下划线(_)组成的字符串

        标识符规则:

        (1)标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时 也受到具体机器的限制。例如在某版本C中规定标识符前八位有效,当两个标识 符前八位相同时,则被认为是同一个标识符。

        (2)在标识符中,大小写是有区别的。例如CLANG和Clang 是两个不同的标识符。

        (3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,做到“顾名思义”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Luo.02

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

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

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

打赏作者

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

抵扣说明:

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

余额充值