美文网首页干货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语言从零开始(五)-常量&变量

相关文章

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

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

  • 【OC梳理】基本数据类型和基本运算

    Objective-C作为以C语言为基础的语言,其基本数据类型与C语言类似。 1.基本数据类型 基本数据类型可以参...

  • 【初识C语言】C语言基本数据类型

    C语言基本数据类型简介 1.概述 C 语言包含的数据类型如下图所示: C语言中的基本数据类型有整形、字符型、浮点型...

  • Android NDK开发之旅2--C语言--基本数据类型

    Android NDK开发之旅 目录 C 语言包含的数据类型 如下图所示: C语言的基本数据类型: short、i...

  • 2675字带你进阶C语言中的关键字

    C语言进阶之C语言关键字 基本数据类型 1.数据类型 数据类型可以理解为固定内存大小的别名(例如,在C语言中int...

  • 无标题文章

    今天讲了c语言程序格式,基本数据类型,c语言程序结构。 c语言程序格式一般为 #include int main(...

  • C语言-数据类型

    C语言中数据类型是什么重要的,他们是定义变量的基础。C语言中数据类型大体上可以分为:基本数据类型,构造类型,指针...

  • OC和C中的数据类型

    数据类型对比 C语言数据类型C语言数据类型 OC数据类型

  • 维护中-1

    此文章已经移至 C语言从零开始(十)-循环基础for 上一篇:C语言从零开始(九)-选择结构下一篇:C语言从零开始...

  • C语言基础掌握之day2

    1.C语言中的数据类型 常量:就是程序中不可变化的量,是不可以被赋值的。通过#define定义常量,在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