C语言数据类型

一、数据类型

image

1、基本数据类型

逻辑类型。只有两个量true和false,表示逻辑真值(非0)和逻辑假值(0)。

整数类型。包括char, short, int和long。

浮点类型。包括float和double。

void类型。主要用于说明不返回值的函数或指向任一类型的指针等。

2、数据类型的长度(一般来说)

image

image

image

image

image

3、强制数据类型的转换

强制数据类型的转换是指采用某种方式将某种数据类型强制转换成指定的数据类型,包括显式的数据类型转换,和隐式的数据类型转换;强制类型转换符后面的表达式如存在复杂运算,就一定要用小括号括起来;强制类型转换符是一种不安全的转换,一般都是将高级类型转换成低级类型,要丢失数据的精度;强制类型转换并不改变表达式中变量的数据类型和其值。

二、常量

常量是指在程序运行期间其数值不发生变化的数据。

1、整型常量

整型常量通常简称为整数;整数的表示形式可以是二进制,八进制、十进制和十六进制。

2、浮点常量

浮点常量又称为实数,一般含有小数部分;在C语言中,实数只有十进制的实数,分为单精度和双精度;实数有两种表示方法,即一般形式和指数形式。

3、字符常量

字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符;在C语言中,字符常量具有数值,它的值就是该字符的ASCII码值;可以把字符常量看做一个字节的无符号整数。

4、字符串常量

所谓字符串常量是指用双引号括起来的一串字符来表示的数据(字符串以结尾) 。

5、标识常量

所谓标识常量是指用标识符代替常量使用的一种常量, 其名称通常是一个标识符;标识常量也叫符号常量,一般用大写英文字母的标识符;在使用之前必须预先定义。

其说明形式为:#define <标识常量名称> <常量>

三、宏定义

在软件开发过程中,经常有一些常用或者通用的功能或者代码段,封装成为宏定义函数。

例如:#define MAX(a,b) ((a)>(b)?(a):(b))等价于

int max( int a, int b)

{

return (a>b?a:b);

}

还有一些任务根本无法用函数实现,但是用宏定义却很好实现;比如参数类型没法作为参数传递给函数,但是可以把参数类型传递给带参的宏。

例如:#define MALLOC(n, type) ((type *) malloc((n)* sizeof(type)))

四、变量

1、变量的基础

变量在程序中用变量名表示,变量名由用户根据其用途任意命名;

变量名由字母、数字、下划线组成,不能以数字开头,不能和C的关键字重名;

在程序运行时,变量占据存储空间的大小由其数据类型决定;

变量在内存空间中的首地址,称为变量的地址。

2、变量的声明

变量在程序中使用时,必须预先说明它们的存储类型和数据类型。

变量说明的一般形式是:<存储类型> <数据类型 > <变量名> 。

<存储类型>是关键词auto、register、static和extern。

<数据类型>可以是基本数据类型,也可以是自定义的数据类型。

3、变量的存储类型

a、auto

auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里,缺省时为auto(默认值是随机数)。

b、register

register称为寄存器型,register变量是想将变量放入CPU的寄存器中,这样可以加快程序的运行速度,如申请不到就使用一般内存,同auto。

register变量必须是能被CPU所接受的类型,这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度,并且不能用“&”来获取register变量的地址。

c、static

static变量称为静态存储类型的变量,既可以在函数体内,也可在函数体外说明。(默认值是0)

局部变量使用static修饰,有以下特点:

在内存中以固定地址存放的,而不是以堆栈方式存放

只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。

d、extern

当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。

extern称为外部参照引用型,使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。

当static用于修饰全部变量时,其它文件无法使用此变量。

4、变量补充

一个变量根据其作用域的范围可以分为函数原型作用域、局部变量、全局变量。

a、函数原型作用域

函数原型中的参数,其作用域始于“(”,结束于”)”。

假设有原型声明:double Area(double radius);那么radius的作用域仅再于此,不能用于程序正文其他地方,因此可以省略。

b、局部变量

在函数内部定义的变量成为局部变量。局部变量仅能被定义该变量的模块内部的语句所访问,换言之,局部变量在自己的代码模块之外是不可见的。

c、全局变量

与局部变量不同,全局变量贯穿整个程序,它的作用域为源文件,可被源文件中的任何一个函数使用,它们在整个程序执行期间保持有效。

注:全局变量的定义和全局变量的声明并不是一回事,全局变量定义必须在所有的函数之外,且只能定义一次,其一般形式为:[extern]类型说明符 变量名,变量名……,extern可以省略。而全局变量的声明出现在要使用该变量的各个函数内。全局变量声明的一般形式为::extern 类型说明符 变量名,变量名……。

在同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。

全局变量的作用域可以通过关键字extern扩展到整个文件或其他文件。

原文地址:https://www.cnblogs.com/sanwumanzi/p/10514153.html