C语言——【复习提纲】1.数据类型

来源:互联网 发布:微电影制作软件 编辑:程序博客网 时间:2024/06/06 13:16

  • 一基本数据类型
    • 整型
      • 枚举类型
    • 浮点
      • PS单精度和双精度的区别
    • 指针
      • 字符串常量string literal
      • PS a
  • 二基本声明
    • 初始化
    • 数组声明
    • 指针声明
    • 隐式声明
  • 三typedef
  • 四常量
  • 五作用域
    • 代码块
    • 文件
    • 原型
    • 函数
  • 六连接属性
  • 七存储类型
  • 八static

一、基本数据类型

整型

整型包括:
1、char(8位:0~0xFF)
2、short int(16位:0~0xFFFF)
3、int(32位:0~0xFFFF FFFF)
4、long int(64位:0~0xFFFF FFFF FFFF FFFF)
其中,每种类型又包括有符号(signed)无符号(unsigned)两种。即:

1、8位(0~0xFF)
a、 unsigned char : 0~256。
b、 signed char :-127~127。

2、16位(0~0xFF FF)
a、unsigned short int: 0~65,535。
b、signed short int : -32,767~32,767。

3、32位(0~0xFFFF FFFF)
a、**unsigned int:**0~4,294,967,295。

4、64位(0~0xFFFF FFFF FFFF FFFF)
a、unsigned long int: 0~2^64。
b、signed int:-9,223,372,036,854,775,807~+9,223,372,036,854,775,807。

枚举类型

枚举(enumerated)类型:指它的值为符号常量而不是字面值的类型。
以如下方式声明一个类型

enum Jar_Type {CUP,PINT,QUART,HALF_GALLON,GALLON};  /*声明了一个类型,称为Jar_Type*/

这种类型的变量以如下方式声明:

enum Jar_Type milk_jug, gas_can, medicine_bottle;

这种类型的变量以整型的方式存储,这些符号名的实际值都是整型值。
这里 CUP为0,PINT为1,以此类推——如果某个符号名未被显示指定一个值,那么它的值就比前面的一个符号名的值大1
也可以为这些符号名指定特定的整型值,如:

enum Jar_Type{CUP = 8,PINT = 16,QUART = 32,HALF_GALLON = 64,GALLON = 128};

浮点

如3.14159 和 6.023*(10^23)这样的1数值无法按照整数存储。
3.14159——并非整数;
6.023*(10^23)——远超计算机整数所能表达的范围。
可以浮点数形式存储。
通常以一个小数+一个某个假定数为基数的指数组成,如:
.3243F * (16^1 )——>.11(3) 0010(2) 0100(4) 0011(3) 1111(F)*(2^2)——>他们所表示的值都是3.14159.
用于表示浮点值的方法很多,标准并未规定必须使用某种特定的格式

浮点类型包括:
a、float ——单精度
b、double——双精度
c、long double——在某些支持扩展精度的机器上提供扩展精度
标准规定了一个最小范围:所有浮点类型至少能容纳从10^(-37)~10^37之间的任何值

PS:单精度和双精度的区别

区别:单精度和双精度精确的范围不一样
单精度(float),一般存储占用4字节(32位),有效位数为7位;
格式:1位符号+8位指数+23位小数。

这里写图片描述

双精度(double),一般存储占用8字节(64位),有效位数为16位。
格式:1位符号+11位指数+52位小数。

这里写图片描述

原因:
不管float还是double 在计算机上的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位,指数位和尾数部分。其中float的符号位,指数位,尾数部分分别为1, 8, 23.
双精度分别为1, 11, 52。
精度主要取决于尾数部分的位数,float为23位,除去全部为0的情况以外,最小为2的-23次方,约等于1.19乘以10的-7次方。
所以float小数部分只能精确到后面6位加上小数点前的一位,即有效数字为7位
所以double小数部分能精确到小数点后15位加上小数点前面的一位,即有效位数为16位
链接:https://www.zhihu.com/question/26022206/answer/81573345
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

指针

变量的值存储在计算机的内存中,每个变量都占据一个特定的位置。每个内存位置都由地址唯一确定并引用
指针:地址的另外一个名字;
指针变量:一个其值为另外一个(一些)内存地址的变量。

字符串常量(string literal)

C语言存在字符串的概念:一串以NUL字节结尾的零个或多个字符
因为NUL是用来终结字符串的,所以在字符串内部不能有NUL字节。
NUL——不可打印的字符。
字符串常量的书写方式:用一对双引号包围一串字符。
“Hello”
“\aWarning\a”
“Line1\nLine2”
“”——字符串常量可以为空。即是为空字符串,依然存在作为终止符的NUL字节。

PS: \a

\a是 转义字符 007,响铃符 BEL
printf(“%d “,’\a’); 输出 7
printf(“%c “,’\a’); 发出一声“嘀”
printf(“\a”); 发出一声“嘀”
printf(“\007”); 发出一声“嘀”

二、基本声明

变量声明的基本形式
说明符(一个或多个) 声明表达式列表

说明符(specifier):包含一些关键字
1、用于描述被声明的标识符的基本类型
2、可用于改变标识符的缺省存储类型和作用域。
说明符可为一些用于修改变量的长度或者是否为有符号数的关键字,如:

shortlongsignedunsigned

signed关键字一般只用于char类型,因为其他整型在缺省情况下都是有符号数,至于char是否为signed——因编译器而异。
浮点型,除了long double之外,其余几个说明符(short, signed, unsigned)都是不可用的。

初始化

在一个声明中,可以给一个标量变量指定一个初始值
方法:在变量名(j)后面跟一个等号(赋值号 = ),后面是你想要给赋给变量的值(15)。
例: int j = 15; //声明j为一个整型变量,其初始值为15.

数组声明

为了声明一个一维数组,在数组名后要跟一对方括号,方括号里面是一个整数,用于指定数组元素的个数
例:int values[20]; //名字values加一个下标,产生一个类型为int的值(共有20个整型值)
数组的下标总是从0开始,最后一个元素的下标是元素的数目减1。
注意:编译器并不检查程序对数组下标的引用是否在数组的合法范围之内。

指针声明

例:int *a; //表示表达式*a产生的结果类型是int.
a是指向int的指针。
*操作符:间接寻址(indirection)。
间接寻址操作只对指针变量才是合法的,指针指向结果值。

int* b,c,d; //仅有b为指针,其余两个变量为普通的整型,*是表达式*b的一部分,只对这个标识符有有。

int *b,*c,*d; //b,c,d均为指针

char *message = “Hello world!” ; //把message声明为一个指向字符的指针,并用字符串常量中的第一个字符的地址对该指针进行初始化。
等效于:
char *message;
message = “Hello world!”;

隐式声明

标准强制不能使用;

三、typedef

C语言支持typedef机制,允许为各种数据类型定义新名字。
typedef char *ptr_to_char; //把变量ptr_to_char作为指向字符的指针类型的新名字。
ptr_to_char a; //声明a是一个指向字符的指针。

四、常量

1.const
ANSI C 允许你声明常量,常量的样子和变量完全一样,只是他们的值不能修改。可以使用const关键字来声明常量:
int const a;
const int a;
这两语句都是把a声明为一个整型它的值不能被修改。
int *pi;//pi是一个普通的指向整型的指针
int const *pci;//pci是一个指向整型常量的指针。可修改指针的值,不可修改它所指向的值
int * const cpi;//声明pci为一个指向整型的常量指针。指针是常量,它的值无法修改,可修改它所指向的整型的值;
int const * const cpci;//无论是阵阵本身还是它所指向的值都是常量,不允许修改。
2.#define
#definel MAX_ELEMENTS 50

五、作用域

代码块

文件

原型

函数

六、连接属性

七、存储类型

八、static