码迷,mamicode.com
首页 > 编程语言 > 详细

C语言的概述及C的数据类型

时间:2016-07-13 17:51:56      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

一、C语言概述

1.C语言的诞生

2.C语言的特点

3.嵌入式C的使用

二、C的数据类型

1.什么是数据类型

2.各数据类型的字节长度和指针变量的字节长度

3.变量及变量的特点

4.右左法则及举例

5.sizeof()和strlen()



一、C语言概述

     1.C语言的诞生

C语言是在1978年由丹尼斯.里奇与布莱恩·科尔尼干一起出版了名著《C程序设计语言》时发表诞生的。目前C的发展经历了以下的过程

在1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

《可移植的C语言编译程序》的发布,推广了unix系统,于1978年,C语言正式发布,同时著名的书籍《The C Programming Language》发布。在之后,ANSI 在这本书的基础上制定了C语言标准。

于1990年, ISO接受了 C 为I SO C 的标准(ISO9899-1990)。并于1994年,修订了C语言标准。5年之后, ISO对前版本做了修改,此次也修改了C语言的标准,增加了一些需要的功能。于 2001与2004,这两年发生了 两次技术修改。

目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则又略有差别。

2.C语言的特点

.C语言运用广泛,目前在许多编译器中都可以实现:

具有出色的可移植性,能够在多种不同的体系结构的软/硬件平台上运行。

具有简洁紧凑、使用灵活的语法机制,并能直接访问硬件

具有很高的运行效率

3.嵌入式C的使用

3.1嵌入式使用C语言开发的原因:在嵌入式操作系统的内核中主要由C语言实现,程序员进行开发时需要向内核中添加新的功能,且C能够直接访问硬件,移植性好,效率高的特点,所以使用C进行开发。虽然汇编语言的效率相比于C语言高,但是它不能直接实现一些比较复杂的功能如for循环等,通常汇编语言在对简单硬件的初始化中进行使用。

二.C的数据类型

1.什么是数据类型

数据类型就是数据集合的划分,不同的数据类型对CPU具有不一样的意义,所以一定要注意相应变量数据类型的定义和转换。          数据类型又划分为两大类:基本数据类型和复合数据类型。

复合数据类型包括 数组,结构,联合,枚举,指针

基本数据类型包括 空类型,字符型,数值型

而数值型又包括实型(单精度实型,双精度实型),整型(短整型,整型,长整型


2.各数据类型的字节长度和指针变量的字节长度

2.1.在不同的编译系统中,编译系统对各数据类型分配字节数可能不同,对此我们在编写程序前必须对所用的编译系统有相关的了解。例如在gcc编译中各数据类型字节长度为:

int:4个字节;short:2个字节;long:4个字节:char:1个字节;float:4个字节

技术分享技术分享

2.2指针的字节长度:通常指针的字节长度都是固定的,且长度有操作系统所决定。指针中存放的元素为地址,而不同的操作系统有其固定的地址长度,因而指针的字节长度也就固定。例如:

技术分享技术分享

3.变量及变量的特点

3.1什么是变量

在其值的作用域内可以改变的量称为变量。一个变量应该有一个名字,在内存占据一定的存储空间。

3.2变量的三大特点:

变量的数据类型:主要说明变量占用内存空间的大小如int型。

变量的作用域:变量的有效性的范围。

●变量的存储类型:变量在内存中的存储方式。不同的存储方式影响变量在内存的生存周期。

3.3变量的声明和定义

定义:创建一个变量,为其分配内存空间,并为它取变量名,一个变量只能定义一次。

声明:告知编译器这个变量名已经匹配在一块内存上了,但是并未为其分配内存。

3.4变量声明和定义的两种情况:

●定义性声明:需要建立存储空间。例如:int a在声明时就已经建立了存储空间。

●引用性声明:不需要建立存储空间。例如:extern int a其中变量a是在别的文件中定义的。

3.5变量的存储区域的划分

技术分享

 栈空间:局部变量,函数形参,自动变量

 堆空间:malloc ralloc calloc 分配空间

 ③ 数据段分为bbs,rodata,data。 

         bss:保存未初始化的全局变量

  rodata:常量

  data(静态数据区):全局变量,static修饰变量

 数据段代码段 即数据区

栈空间特点:先进后出,管理权限:系统

堆空间特点:先进先出,管理权限:用户

3.6

全局变量与局部变量的区别

存放位置     

局部变量存放于栈空间,全局变量存放在 数据段的data(静态数据区)区域

赋值

   当我们定义变量时,如果定义为全局变量,系统会自动把变量初始化为默认值(内置类型初始化为系统默认值,自定义类型调用相应的初始化函数进行初始化),而定义为局部变量时,系统不会自动初始化变量,我们必须手动对变量进行初始化(无论是内置类型还是自定义类型),否则得到的结果可能和我们预期的不一致,甚至导致程序出错

 何时释放

全局变量:在编译时分配,在main结束时释放;

局部变量、形参:在函数调用时分配,在函数返回时释放

作用域

全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新内阁结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

局部变量也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回。  

静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同的静态全局变量,他们也是不同的变量。

 4.右左法则及举例

4.1.右左法则:从最内部的括号(变量)开始阅读声明,先向右看,再向左看,碰到一个括号时调转阅读方向,括号内的内容阅读完毕则跳出括号。直到全部阅读结束为止。例如:  

(1)int a;            a 整型变量

(2)int *a;            p 整型指针变量

(3)int **a;           p指针变量p,p指向另一指针,另一指针指向整型数

(4)int *a[10];         a是有十个元素的数组,里面存放着指针变量,这些指针指向整型(整型指针数组)

(5)char (*a)(int);      a是一个指针变量,它指向一个形参为int型,返回值为char型的函数(char型函数指针变量)

(6)int (*a[10])(int);    a是一个指针数组,该指针指向一个形参为int型,返回值为int型的函数

(7)int *(* (*fp) (int))[10];fp是一个函数指针变量,该函数是一个形参为int型,返回值为数组指针的函数,该数组指针指                       向整型指针

(8)void *(*c)(char ,int (*)());c是一个函数指针变量。该函数是一个形参为char,另一形参为形参为空返回值为int型的函                        数指针变量且返回值为void的函数。

5.sizeof()和strlen()

5.1.sizeof(): sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。切记sizeof()是一个运算符而不是一个函数。例如:

技术分享

技术分享

sizeof()在对变量的存储大小进行计算时sizeof()可不加上括号,sizeof()在对数据类型的存储大小进行计算时sizeof()不能省略括号。

5.2.strlen():从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符‘\0‘为止,然后返回计数器值(长度不包含‘\0‘),实质上是一个C函数。





C语言的概述及C的数据类型

标签:

原文地址:http://blog.csdn.net/qq_35535992/article/details/51878795

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