zoukankan      html  css  js  c++  java
  • C语言常量、变量和关键字

    一、一切都是数据

    对计算机来说,图片、文字、音乐、视频等一切都是数据,在计算机中以二进制的0和1存储。

    我们编写程序的目的就是告诉计算机如何输入、处理、传输、存储和展示数据。

    数据分为静态数据和动态数据。

    1、静态数据

    永久性的数据,存储在永久的介质中,如硬盘、磁带、U盘、光盘等,只要介质没坏数据都是存在的,电脑关机重启后依然存在。

    2、动态数据(临时数据)

    程序在运行过程中,动态产生的的临时数据,一般存储在内存中,程序退出或者电脑关机时这些临时数据会被清除。

    为什么不把动态数据存放到硬盘?因为计算机访问内存的速度比访问硬盘快很多。硬盘的存储空间比内存大,价格比内存便宜。

    二、常量

    常量或常数,表示固定不变的数据,是具体的数据。

    1)字符常量,如'6','a','F',不能是中文,例如'女',因为一个汉字和全角的符号占两个字节(GBK编码)。

    2)整型常量,如6,27,-299。

    3)浮点型常量,如5.43,-2.3,5.67,6.0。

    4)字符串常量,如"625","女","www.freecplus.net","西施"。

    三、变量

    常量是数据,变量是存放数据的容器,和常量在称呼上只差一个字,但不是兄弟关系,而是水与水桶的关系。

    变量使用前必须先进行声明(或定义),向操作系统申请一块内存空间,用于存放数据。

    1、整数型、字符型、浮点型变量

    变量的声明,也称之为变量的定义,或定义变量,或声明变量,这些都是程序员的习惯叫法,实际上都是同一个意思。

    定义整数型变量用关键字int,它是单词integer(整数)的缩写。

      int   ii;           // 定义整数型变量,用于存放整数。
    

    定义字符型变量用关键字char,它是单词character(字符)的缩写。

      char  cc;          // 定义字符型变量,用于存放字符。
    

    定义浮点型变量用关键字float或double,float的精度不够,实际开发中建议弃用。double,双精度,很精确的意思。

    double money;   // 定义浮点型变量,用于存放浮点数。
    

    2、字符串变量

    在C语言中,没有“字符串”这个数据类型,而是用字符数组来存放字符串,并提供了丰富的库函数来操作字符串。

    char name[21];       // 定义一个可以存放20字符的字符串。
    

    注意几个细节:

    1)如果要定义一个存放20个英文的字符串,数组的长度应该是20+1,原因以后再讨论。

    2)中文的汉字和标点符号需要两个字符宽度来存放。

    例如name[21]可以存放20个英文字符,或10个中文字符。

    3)字符串不是C语言的基本数据类型,不能用“=”赋值,不能用“>”和“<”比较大小,不能用“+”拼接,不能用==和!=判断两个字符串是否相同,要用函数,具体方法我以后再介绍,现在了解就可以。

    3、变量的命名

    变量名属于标识符,需要符合标识符的命名规范,具体如下:

    1)变量名的第一个字符必须是字母或下划线,不能是数字和其它字符。

    2) 变量名中的字母是区分大小写的。比如 a 和 A 是不同的变量名,num和Num也是不同的变量名。

    3)变量名绝对不可以是C语言的关键字。

    4)关于变量的命名,为了便于理解,尽可能用英文单词或多个英文单词的简写,太短不能表达含义,太长了书写麻烦,如果英语不好,那就用中文拼英的第一个字母,例如身份证号码,cardid、userid都可以,sfzhm也行,不要怕被笑话,英语不好的程序员很多。

    四、C语言的关键字

    关键字也称为保留字,共32个,这些单词在C语言中有特别的含义,程序员不能把它用于变量或函数的命名。

    auto :声明自动变量
    break:跳出当前循环
    case:开关语句分支
    char :声明字符型变量或函数返回值类型
    const :声明只读变量
    continue:结束当前循环,开始下一轮循环
    default:开关语句中的“默认”分支
    do :循环语句的循环体
    double :声明双精度浮点型变量或函数返回值类型
    else :条件语句否定分支(与 if 连用)
    enum :声明枚举类型
    extern:声明变量或函数是在其它文件或本文件的其他位置定义
    float:声明浮点型变量或函数返回值类型
    for:一种循环语句
    goto:无条件跳转语句
    if:条件语句
    int: 声明整型变量或函数
    long :声明长整型变量或函数返回值类型
    register:声明寄存器变量
    return :子程序返回语句(可以带参数,也可不带参数)
    short :声明短整型变量或函数
    signed:声明有符号类型变量或函数
    sizeof:计算数据类型或变量长度(即所占字节数)
    static :声明静态变量
    struct:声明结构体类型
    switch :用于开关语句
    typedef:用以给数据类型取别名
    unsigned:声明无符号类型变量或函数
    union:声明共用体类型
    void :声明函数无返回值或无参数,声明无类型指针
    volatile:说明变量在程序执行中可被隐含地改变
    while :循环语句的循环条件
    

    C语言的关键字无需背诵,如果程序用不小心用了关键字给变量命名,编译时会报错,用多了就熟悉了。

    五、变量的初始化

    变量在定义后,操作系统为它分配了一块内存,但并不会把这块内存打扫干静,也就是说内存中可能有垃圾数据,建议在使用之间对其初始化(打扫干静)。

    变量初始化是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。

    1、整数型、字符型、浮点型变量初始化

    对整数型、字符型、浮点型变量来说,初始化就是给它们赋0值。

    可以在定义的时候立即初始化。

      int   ii=0;          // 定义整数型变量并初始化
      char  cc=0;          // 定义字符型变量并初始化
      double money=0;     // 定义浮点型变量并初始化
    

    也可以先定义,然后再初始化。

      int   ii;          // 定义整数型变量
      char  cc;          // 定义字符型变量
      double money;     // 定义浮点型变量
      ii=0;              // 初始化ii为0
      cc=0;              // 初始化cc为0
      money=0;          // 初始化money为0
    

    2、字符串变量的初始化

    对字符串变量来说,初始化就是把内容清空,本质上也是赋0值。

      char name[21];                    // 定义一个可以存放20字符的字符串
      memset(name,0,sizeof(name));   // 清空字符串name中的内容
    

    注意了,字符串变量的初始化与其它类型不同,要用memset函数,先不要问为什么,就这么抄,以后再解释,先不要花时间和精力去研究它。

    六、变量的赋值

    把常量的值赋给变量:

      ii=10;                  // 整数型变量赋值10
      cc='A';                 // 字符型变量赋值'A'
      money=1500.87;         // 浮点型变量赋值1500.87
      strcpy(name,"西施");   // 对字符串变量赋值"西施"
    

    把变量的值赋给变量:

      int ii1=ii;               // 定义变量ii1并把ii的值赋给它
      char cc1=cc;              // 定义变量cc1并把cc的值赋给它
      double money1=money;    // 定义变量money1并把money的值赋给它
      char name1[21];          // 定义字符串变量name1
      strcpy(name1,name);     // 把name的值赋给name1
    

    注意了,字符串变量的赋值与其它类型不同,不能用=号,要用strcpy函数,先不要问为什么,就这么抄,以后再解释,先不要花时间和精力去研究它。

    示例(book6.c)

    /*
     *  程序名:book6.c,此程序演示变量的赋值
     *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
      int   ii=0;       // 定义整数型变量并初始化
      char  cc=0;       // 定义字符型变量并初始化
      double money=0;   // 定义浮点型变量并初始化
      char name[20];    // 定义字符串变量
      memset(name,0,sizeof(name));  // 字符串初始化
    
      ii=10;                 // 整数型变量赋值10
      cc='A';                // 字符型变量赋值'A'
      money=1500.87;        // 浮点型变量赋值1500.87
      strcpy(name,"西施");  // 对字符串变量赋值"西施"
    
      printf("ii=%d=
    ",ii);
      printf("cc=%c=
    ",cc);
      printf("money=%f=
    ",money);
      printf("name=%s=
    ",name);
    }
    

    运行效果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5nH0mha-1583200921673)(media/6f29d51b7872a6778b09dea8098346c5.png)]

    七、多变量操作

    1、多个变量的定义

    定义多个变量可以书写多条语句。

    int ii;
    int jj;
    

    相同类型变量的定义可以书写为一条语句,如下:

    int ii,jj;
    

    2、多个变量的赋值

    整数、字符和浮点型变量可以用一条语句对多个变量赋相同的值,如果要赋不同的值,只能用多条语句了。

    ii=jj=10;     // 对ii和jj赋相同的值10
    ii=jj=30;     // 对ii和jj赋相同的值30
    ii=10;        // 对ii赋值10
    jj=30;        // 对jj赋值30
    

    不论值是否相同,一条语句只能对一个字符串变量赋值。

    strcpy(name,"西施");          // 对字符串变量name赋值"西施"
    strcpy(name1,"西施");         // 对字符串变量name1赋值"西施"
    strcpy(name,name1,"西施");   // 这是个天才的想法,但行不通,不符合strcpy函数的语法。
    

    这是个天才的想法,但行不通,不符合strcpy函数的语法。

    八、const约束

    const 是 constant 的缩写,意思是“恒定不变的”,它是定义只读变量的关键字。用 const定义只读变量的方法很简单,就在定义变量时前面加 const 即可,如:

    const  double  pi = 3.1415926;
    

    用 const定义的变量的值是不允许改变的,不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值,如果程序中试图改变它的值,编译的时候就会报错。

    示例(book7.c)

    /*
     *  程序名:book7.c,此程序演示只读变量
     *  作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main()
    {
      const double pi=3.1415926;   // 定义只读变量
    
      pi=3.1415927;    // 试图改变只读变量的值。
    }
    

    编译效果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mOpT1nRN-1583200921676)(media/0b957a8f97ddcc35f9aa2aeaed5a83cf.png)]

    九、课后作业

    本章节介绍的是一些基本概念,各位只要理解了这些概念就行了,编写示例程序,把本章节介绍的知识点全部演示一遍,用程序演示可以加深理解和映象。

    还有一个注意事项,C语言很多知识点是交叉的,如果课程中出现的内容是没有介绍的知识点,先照抄就行,不要去纠结它的细节,以后在合适的时机再介绍它。

    十、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

  • 相关阅读:
    JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法
    目前流行前端几大UI框架
    C#客户端嵌入Chrome浏览器的实现
    ARM编译中的RO、RW和ZI DATA区段
    如何成为优秀的技术Leader?做到这三点就够了
    VMware虚拟机中的CentOS安装Nginx后本机无法访问的解决办法
    Centos下安装nginx步骤解析
    centos修改、保存文件的详细步骤
    configure: error: C preprocessor "arm-linux-gnueabihf-g++" fails sanity check
    有关fgetc配合feof逐行读取文件最后一行读取两遍的错觉?
  • 原文地址:https://www.cnblogs.com/wucongzhou/p/12499359.html
Copyright © 2011-2022 走看看