欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-15 15:16:57
一、c语言概述 1.c语言的诞生 2.c语言的特点 3.嵌入式c的使用 二、c的数据类型 1.什么是数据类型 2.各数据类型的字节长度和指针变量的字节长度 3.变量及变量的特点 4.右左法则及举例...

一、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个字节

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

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

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

 

3.变量及变量的特点

3.1什么是变量

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

3.2变量的三大特点:

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

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

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

3.3变量的声明和定义

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

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

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

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

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

3.5变量的存储区域的划分

 

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

 

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

②堆空间: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()是一个运算符而不是一个函数。例如:

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

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

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

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