美文网首页干货C语言学习天花板
C语言从零开始(四)-基本数据类型&赋值

C语言从零开始(四)-基本数据类型&赋值

作者: 天花板 | 来源:发表于2015-10-31 19:08 被阅读7562次

    上一篇C语言从零开始(三)-基本字符集讲了基本语法的第一部分,今天我们来说说C语言中的数据类型和赋值。

    一,概述

    C 语言包含的数据类型如下图所示:

    C语言数据类型

    这张图大家肯定在很多教材中都见过,它包含了C语言中涉及的全部数据类型

    1. 数据类型的意义

    先简单说一下数据类型的作用。在C语言中,程序操作的最基本的元素叫做变量。编程的实质就是把变量中保存的内容进行处理,最终返回一个处理后的结果。

    而计算机用于保存不同变量的内部结构是不同的,最直接的不同就是在内存中为这个变量申请的空间大小不同。因此,我们在定义变量的时候应该告诉计算机这是一个什么类型的变量,这就是数据类型的意义。

    一定有人会问,计算机为啥不给每个变量都分配一个足够大的空间,这样大家就可以使用同一种数据类型了,不用再做区分。这是因为最早的计算机内存是非常有限的,如果你只需要保存很小的数据却用了非常大的空间,那就造成了极大的浪费。如今内存越来越便宜,空间越来越大了,但节省空间开销依然是软件开发的一个重要原则。

    话说有些脚本语言比如JavaScript中是淡化数据类型的,所有的变量都使用统一的数据类型var。有兴趣的同学可以了解一下。

    2. 赋值

    定义了变量之后,要给变量赋值。没有被赋值的变量是不能被使用的,这是C语言的一个重要规定。请看这段代码:

    int a;
    a = 5;
    

    以上这两行完成了两个动作,第一行定义了一个数据类型为“int”,变量名为“a”的变量,第二行给变量"a"赋值5。

    需要注意的是"int"和“a”中间需要一个空格,每行结束后需要一个“;”。

    另外,第二行中“=”两边各有一个空格,这一点不是C语言要求的,只不过是业内约定俗成的规矩,方便阅读。这种规矩还有很多,后面会专门说到,让你的代码风格更地道。

    如果觉得两行代码太麻烦,还可以这样写:

    int a = 5;
    

    这一行和前面的两行效果完全一样,采用哪种写法都可以。

    此时如果我们想看看a中的值是不是5可以执行下面这行代码:

    printf("%d", a);
    

    现在你知道如何把这几行代码在Code::Blocks中运行吗?如果不会请阅读之前的文章。

    BTW:最后要说的是,定义了变量一定要尽快赋一个值,我们叫初值。因为定义变量实际上是在内存中开辟了一块新空间,但空间里也许有之前留下的东西(数据)。所以,如果你不用初值把这块空间覆盖掉,很容易在后面出现莫名其妙的问题。

    二,各种数据类型介绍

    1.整型

    整型分为short、int、long,最大的特点就是在不同平台或编译器下所分配的内存空间不同。我们统一按32bit Windows操作系统进行讲解。

    整型主要任务是保存自然数的,只不过保存数字的范围不同。

    1.1 短整型(short)

    一般大小2Bytes(16bits),定义方法

    short a = 1;
    

    1.2 整型(int)

    这是最常用的整型,一般大小4Bytes(32bits),定义方法:

    int a = 6;
    

    1.3 长整型(long)

    一般大小8Bytes(64bits),定义方法:

    long a = 10;
    

    虽然在不同平台这三种变量表示的大小不同,但有一个基本原则:

    short类型的大小 <= int类型的大小 <= long类型的大小
    “<=” 这个符号是C语言中“小于或等于”的意思,后面会介绍

    2. 浮点型

    浮点型包括单精度型和双精度型。

    2.1 单精度型(float)

    浮点型,又称实型,也称单精度。一般占4Bytes(32bits)

    float a = 4.5f;
    

    这里4.5后面有个“f”,先记着写法,后面我们会具体讲解。

    2.2 双精度型(double)

    一般占8Bytes(64bits)

    double a = 4.5;
    

    打印浮点型数值的方法略有不同,如下:

    printf("%f", a);
    

    注意,只是“%f”略有不同。

    3. 字符类型

    3.1 单个字符类型

    在各种不同系统中,字符类型都占1Bytes(8bits)。定义如下:

    char c = 'a';
    

    也可以用字符对应的ASCII码赋值,如下:

    char c = 97;
    

    打印字符类型的方法:

    printf("%c", c);
    

    这个类型需要多说几句。计算机其实是不能保存字符的,因此,字符类型的内部其实保存的也是数字。那么怎么知道哪个数字代表什么字符呢?有一张世界通用的“密码表”叫做ASCII码,它保存着大部分常用字符和数字的对应关系。

    就像《潜伏》中余则成收到广播中念的数字,怎么能知道它们代表什么意思呢?需要找一本密码本查一下,于是数字变成了汉字。一样的道理。

    潜伏里接收电台里密码剧照

    3.2 字符串

    C语言中使用双引号" "表示一个字符串,比如:"ABCDEF"。这就是我们在打印"Hello World!"时为什么要使用双引号的原因。

    在C++中,有个字符串的类型交string,于是我们可以这么写:

    string str = "ABCDEF";
    

    很遗憾的是,C语言中并没有string类型,我们只能用字符数组保存字符串。关于字符数组我们会在数组部分讲解。

    3.3 练习

    这里提出个简单的问题,下面代码输出结果是什么,看你能不能想明白。

    void main()
    {
        char a = 'a';
        char c;
    
        c = a + 1;
    
        printf("%c", c);
    }
    

    4 其他类型

    前面讲的六种数据类型是C语言的基础数据类型。目前掌握就可以了,至于其他的结构体、数组之类的后面会专门讲到。

    还有两个关键字signed和unsigned,是用来定义变量是否保存正负号的,也可以先不了解。

    三,变量的命名规则

    真正的软件开发中,变量命名是一个非常重要的内容。在团队开发、项目传承的过程中,代码的可读性起着重要的作用。因此要养成好的变量命名习惯。

    1. 命名要能望文生义

    要便于记忆和阅读。标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。C语言开发中有一个比较著名的命名规则叫“匈牙利命名法”,有兴趣可以学习一下。

    无论什么样的命名规则,都有它的利弊所在,真正的项目中也会有具体的命名规则要求。重点是,每个人自己写的代码要自己有一个统一的规则,这样无论是别人还是自己都更容易读懂和维护。不要过一段时间连自己写的代码都看不懂了,这是最基本的要求。

    其实大学计算机等级考试中,很多题目都是符合这条的,这给考生很多空子可钻。记得有个题目是这样的。

    int a, b, sum;
    a = 5;
    b = 1;
    
    sum = XXXXX(a, b);
    
    printf("%d", sum);
    

    请问屏幕打印出的数字是多少?

    这道题主要考的是XXXX函数的问题,也许你根本没看懂这个函数是啥意思,但一看变量“sum”你就知道最终输出的肯定是一个和,所以答案是6。

    2. 要用最短的命名表达最多的意思

    虽然现在对命名长度的限制越来越小,但过长的命名还是影响代码的可读性。

    3. 尽量不要出现数字

    Value1,Value2 这样的变量还是少用为好

    4. 不要靠大小写区分的相似的标识符

    int a, A; // 绝对不允许 
    

    反正容易混淆的就尽量别用

    好了,今天就先说到这里。下一篇我们开始讲常量与变量。

    我是天花板,让我们一起在软件开发中自我迭代。
    如有任何问题,欢迎与我联系。


    上一篇:C语言从零开始(三)-基本字符集
    下一篇:C语言从零开始(五)-常量&变量

    相关文章

      网友评论

      • Kasign:Mark
      • 沈浪213:输出b?
      • 6ad994b2d955://C program test
        #include <stdio.h>
        int main(void)
        {
        double Number_1 =0.0;
        double Number_2 =100;
        printf(" input the number \n");
        scanf("%f",&Number_1);
        printf(" Number_1 is %.2f\n",Number_1);
        printf(" Number_2 is %.2f\n",Number_2);
        return 0;
        }
        问一下天花板大大,我最近在学习过程中出现点疑惑,寻思两天仍不能解决,主要是因为自学到了类型这一部分,每次涉及到double类型总要出错,输出为0.测试代码如上,我自己做的小测试代码,同样都是double类型的两个变量,一个需要运行后scanf()输入,一个直接赋值100,运行后,scanf()输入的也是100,输出结果后,问题来了,同为小数的浮点类型,一个输入100,一个赋值100,最后输出的时候,Number_1输出为0 ,直接赋值的Number_2能正常输出为100.00.随后我又反反复复在 %f 与 %lf 之间来回修改,发现针对double类型,在scan()必须为 %lf ;需要添加字母L,不然会导致最后结果为0.00.而在printf()里面,必须是%f,反而“不能”添加字母L,不然会导致最后输出错误,为何double类型在scanf里 是LF,而printf里是F呢,种子选手,希望能解释一下,是不是我的什么编译环境有毛病了,还是说两个scanf和printf里的% 格式说明符就是不一样,那还有别的类型也存在这种不统一的问题吗?算了,后面这个问题其实我自己编一段小代码一个一个测试就好了,自己动手,那天花板大大就帮忙解释I下第一个问题吧,就是;是不是我的什么编译环境有毛病了,还是说两个scanf和printf里的% 系列的格式说明符就是不一样
      • 猫的世界:以后要多向你学习!
      • 7a7e17701c0a:继续支持
      • 5402fc9aa6ef:在2.1那里应该占3bits还是32bits?
        天花板:@li_嘉伟_jw 已经改正,谢谢提醒~
      • 317c3a11835c:你是做iOS的么。。。最近在自学,感觉UI这部分好难啊,看得头疼,写不出
        317c3a11835c:@天花板 很多方法啊,记不住
        天花板:@TopSage UI你可以网上找些项目学习一下,帮助比较大
      • 61019d6b0f44:收藏,以后有用,现在看不懂(。•́︿•̀。)
      • Story_Mr:有没有c语言二级考试的好学习方法 我基础差 考都考不过 求教
        天花板:@Story_Mr 多做卷子,多上机做模拟编程题~
      • 81202f04dabc:我学的是网络营销
      • 9f69c86f02d9:用printf输出变量的值不需要加“&”吗
        天花板:@_大曦3 代码贴上来看看,或者邮件沟通。应该是别处的错误
        9f69c86f02d9:@天花板 可是编程的时候 不加取地址符,连编译都会出错。
        天花板: @_大曦3 不需要。&叫做取地址符合,如果加了打印出来的是变量的地址。这些不用死记,多做练习就好了。
      • c9ab8809f4cf:最爱了 谢谢
        天花板: @只有自己努力 欢迎继续支持
      • 想很多小姐:大一学了,就没再看过。忽然看到感觉好熟悉,可惜只是眼熟。哈哈,赞一个~
        想很多小姐:@Solitude阿們 大三狗。。
        3f123833e3f8:@Daisy__93 兄台现在大几了

      本文标题:C语言从零开始(四)-基本数据类型&赋值

      本文链接:https://www.haomeiwen.com/subject/khzfhttx.html