码迷,mamicode.com
首页 > 其他好文 > 详细

诳言C言语变量和数据类型

时间:2016-08-27 23:53:31      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:二进制   单词   比特   箱子   

在《二进制思惟以及数据的存储》一节中讲到:

  • 盘算机要处置的数据(诸如数字、文字、符号、图形、音频、视频等)是以二进制的方式寄存在内存中的;

  • 我们将8个比特(Bit)称为一个字节(Byte),并将字节作为最小的可操作单位。


我们无妨先从最复杂的整数说起,看看它是若何放到内存中去的。

变量(Variable)

理想生涯中我们会找一个小箱子来寄存物品,一来显得不那么混乱,二来便利今后找到。盘算机也是这个事理,我们需求先在内存中找一块区域,规则用它来寄存整数,并起一个好记的名字,便利今后查找。这块区域就是“小箱子”,我们可以把整数放出来了。
C言语中如许在内存中找一块区域:

int a;

int又是一个新单词,它是 Integer 的简写,意思是整数。a 是我们给这块区域起的名字;当然也可以叫其他名字,例如 abc、mn123 等。
这个语句的意思是:在内存中找一块区域,定名为 a,用它来寄存整数。

留意 int 和 a 之间是有空格的,它们是两个词。也留意最初的分号,int a表达了完好的意思,是一个语句,要用分号来完毕。

不外int a;仅仅是在内存中找了一块可以保管整数的区域,那么若何将 123、100、999 如许的数字放出来呢?
C言语中如许向内存中放整数:

a=123;

=是一个新符号,它在数学中叫“等于号”,例如 1+2=3,但在C言语中,这个进程叫做赋值(Assign)赋值是指把数据放到内存的进程。
把下面的两个语句连起来:

int a;
a=123;

就把 123 放到了一块叫做 a 的内存区域。你也可以写成一个语句:

int a=123;

a 中的整数不是原封不动的,只需我们需求,随时可以更改。更改的方法就是再次赋值,例如:

int a=123;
a=1000;
a=9999;

第二次赋值,会把第一次的数据掩盖(擦除)失落,也就是说,a 中最初的值是9999,123、1000 曾经不存在了,再也找不回来了。
由于 a 的值可以改动,所以我们给它起了一个抽象的名字,叫做变量(Variable)
int a;发明了一个变量 a,我们把这个进程叫做变量界说。a=123;把 123 交给了变量 a,我们把这个进程叫做给变量赋值;又由于是第一次赋值,也称变量的初始化,或许赋初值
你可以先界说变量,再初始化,例如:

int abc;
abc=999;

也可以在界说的同时停止初始化,例如:

int abc=999;

这两种方法是等价的。

变量界说的地位

在VC或VS下,变量界说要放在函数的扫尾;也就是说,在界说变量之前不克不及有其他代码。而在 GCC、Xcode 下,或许在运用了 GCC 编译器的 C-Free、Dev C++、Code::Blocks 下,变量界说可以放在函数的恣意地位。
例如,下面的代码在 VC、VS、GCC、Xcode 下多是准确的:

			#include <stdio.h> int main() { int a = 10; int b = 1000; printf("BianChengBang"); return 0; }

对代码稍作修正,将 printf 语句放在变量 a、b 两头,如下所示:

			#include <stdio.h> int main() { int a = 10; printf("BianChengBang"); int b = 1000; //在界说b变量之前有 printf 语句 return 0; }

修正后的代码在 GCC、Xcode 下是准确的,而在 VC、VS 下就是毛病的。
为什么分歧的编译器会有分歧的差别呢,基本缘由是什么呢?我们将在《C言语变量的界说地位以及初始值》和《C言语的两套规范》两节具体解说。

数据类型(Data Type)

数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并运用这份数据。但成绩是,该若何运用呢?
我们晓得,诸如数字、文字、符号、图形、音频、视频等数据多是以二进制方式存储在内存中的,它们并没有实质上的差别,那么,00010000 该了解为数字16呢,照样图像中某个像素的色彩呢,照样要收回某个声响呢?假如没有特殊指明,我们并不晓得。
也就是说,内存中的数据有多种说明方法,运用之前必需要肯定;下面的int a;就标明,这份数据是整数,不克不及了解为像素、声响等。int 有一个专业的称谓,叫做数据类型(Data Type)
望文生义,数据类型用来阐明数据的类型,肯定了数据的说明方法,让盘算机和程序员不会发生歧义。在C言语中,有多种数据类型,例如:

说  明字符型短整型整型长整型单精度浮点型双精度浮点型无类型
数据类型charshortintlongfloatdoublevoid


这些是最根本的数据类型,是C言语自带的,假如我们需求,还可以经过它们构成愈加复杂的数据类型,前面我们会逐个解说。

延续界说多个变量

为了让程序的书写愈加简练,C言语支撑多个变量的延续界说,例如:

			int a, b, c; float m = 10.9, n = 20.56; char p, q = ‘@‘;

延续界说的多个变量以逗号,分隔,而且要具有相反的数据类型;变量可以初始化,也可以不初始化。

数据的长度(Length)

所谓数据长度(Length),是指数据占用若干个字节。占用的字节越多,能存储的数据就越多,关于数字来说,值就会更大,反之能存储的数据就无限。
多个数据在内存中是延续存储的,彼此之间没有分明的界线,假如不明白指明数据的长度,盘算机就不晓得何时存取完毕。例如我们保管了一个整数 1000,它占用4个字节的内存,而读取时却以为它占用3个字节或5个字节,这显然是不准确的。
所以,在界说变量时还要指明数据的长度。而这恰好是数据类型的别的一个感化。数据类型除了指明数据的说明方法,还指清楚明了数据的长度。由于在C言语中,每一种数据类型所占用的字节数多是固定的,晓得了数据类型,也就晓得了数据的长度。
在32位情况中,各类数据类型的长度普通如下:

说  明字符型短整型整型长整型单精度浮点型双精度浮点型
数据类型charshortintlongfloatdouble
长  度124448


C言语有若干种数据类型,每种数据类型长度是若干、该若何运用,这是每一位C程序员都必需要控制的,后续我们会逐个解说。

最初的总结

数据是放在内存中的,在内存中存取数据要明白三件工作:数据存储在哪里、数据的长度以及数据的处置方法。
变量名不只仅是为数据起了一个好记的名字,还通知我们数据存储在哪里,运用数据时,只需供给变量名即可;而数据类型则指清楚明了数据的长度和处置方法。所以诸如int n;、char c;、float money;如许的方式就肯定了数据在内存中的一切要素。
C言语供给的多种数据类型让程序愈加灵敏和高效,同时也添加了进修本钱。而有些编程言语,例如PHP、JavaScript等,在界说变量时不需求指明数据类型,编译器会依据赋值状况主动推上演数据类型,愈加智能。
除了C言语,Java、C++、C#等在界说变量时也必需指明数据类型,如许的编程言语称为强类型言语。而PHP、JavaScript等在界说变量时不用指明数据类型,编译零碎会主动推演,如许的编程言语称为弱类型言语
强类型言语一旦肯定了数据类型,就不克不及再赋给其他类型的数据,除非对数据类型停止转换。弱类型言语没有这种限制,一个变量,可以先赋给一个整数,然后再赋给一个字符串。
最初需求阐明的是:数据类型只在界说变量时指明,并且必需指明;运用变量时无需再指明,由于此时的数据类型曾经肯定了。


本文出自 “11999725” 博客,请务必保留此出处http://12009725.blog.51cto.com/11999725/1843293

诳言C言语变量和数据类型

标签:二进制   单词   比特   箱子   

原文地址:http://12009725.blog.51cto.com/11999725/1843293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!