C语言的数据类型

 

一、C的数据类型

1.什么是数据类型

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

3.变量及变量的特点

4.右左法则及举例

5.sizeof()和strlen()

 

 

一.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函数。

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值