C源程序的结构特点,C语言数据类型

作者: 编程  发布:2019-11-05

第1章 C语言总结

 

第1章 C语言归纳
1. C源程序的布局特色
2. 书写程序时应总固守的平整
3. C语言的字符集
4. C语言词汇
第2章 数据类型,运算符,表达式
1. C语言的数据类型
2. 整型量
3. 实型量
4. 字符型量
字符常量包涵字符常量和字符变量
5. 变量的发轫值和类型调换
6. 着力运算符和表达式[1]
小结

 

C语言的数据类型:基本数据类型、构造数据类型、指针类型、空类型。

  • 结构数据类型:是依靠已定义的多少个或多少个数据类型用构造方法来定义的。三个构造类型的值能够分解成若干个“成员”或“成分”
  • 指针类型: 指针是生龙活虎种特别的,同期又是两全首要功用的数据类型。其值用来代表有个别变量在内部存款和储蓄器储器中的地址。

C语言数据类型

1. C源程序的结构特征

  1. 叁个C语言源程序可以由多少个或多个源文件组成
  2. 各种源文件可由七个或多个函数组成
  3. 一个源程序无论由几个文本组成,都唯有一个且独有一个main函数,即主函数
  4. 源程序中能够有预管理命令(include 命令仅为内部黄金年代种卡塔 尔(英语:State of Qatar),预管理命令日常应放在源文件或源程序的最前边
  5. 每二个验证,每三个讲话都不得不以总局结尾。但预管理命令,函数头和花括号“{}”之后无法加分号
  6. 标记符,关键字以内必需最少加一个空格以示间距。若原来就有令人瞩指标间距符,也可不再加空格来间距

常量与变量

原文:

2. 书写程序时应总遵守的平整

  1. 八个表达或八个言语占黄金年代行
  2. 用 {} 括起来的部分,平时表示了前后相继的某档次结构。{} 平常与组织语句的首先个假名对齐,并独立占生机勃勃行
  3. 低大器晚成档次的讲话或证实可比高黄金年代等级次序的话语或表明缩进若干格后书写。

常量:程序试行进度中其值不爆发变动的量。

  • 直白常量:
    a.整型常量:1,100,29,-10
    b.实型常量:5.2,6.4,-0.5
    c.字符常量:‘a’,'b'
  • 标识常量:用宏来代表七个常量。在C语言中,能够采取三个标记符来表示二个常量,称之为符号常量。
    标志常量在使用以前须求先定义,其相像格局为:
  • () #define 标识符 常量
    其中#define是一条预管理命令,称为红定义命令,其效率是把该标记符定义为后来的常量值。
    习于旧贯上符号常量的标志符使用大写字母,变量标识符使用小写字母,以示不同
  • 例如:#define PI 3.1415926

 

3. C语言的字符集

  • 字符是整合语言的最宗旨的因素,C语言字符集由字母,数字,空格,标点和特殊字符组成,在字符常量中,字符串常量和注释中还足以选取汉字或任何可代表的图形符号
  1. 字母:小写字母 a~z ,大写字母 A~Z

  2. 数字:0~9 共10个

  3. 空白符(空格符,制表符,换行符卡塔 尔(英语:State of Qatar)只在字符常量和字符串常量中起效果。其余地点,只起间距成效
  4. 标点和特殊字符

变量:其值能够转移的量成为变量

二个变量应该有贰个名字,在内部存储器中据为己有一定的存款和储蓄单元,变量在接受早前必需先定义。
int a=3; int是a的数据类型,a是变量名,3是变量值。

C语言各种数据类型及其在系统中占的字节和取值范围2009-08-21 09:53C语言包含5个基本数据类型: void, int, float, double, 和 char.   (另:C++ 定义了另外两个基本数据类型: bool 和 wchar_t.   一些基本数据类型能够被 signed, unsigned, short, 和 long 修饰  所以short,long等等都不算基本数据类型。  这是书上说的,所以C++是7种基本数据类型。    空值型是一种,但枚举型不算。原因就是枚举型可分的,所以不够基本。    不过不同的书也有不同的规定,比如C++Primer上就说是bool,char,wchar_t,short,int,long,float,double,long double和void,这个暂时没有定论。)    ============================================================    基本类型包括字节型(char)、整型(int)和浮点型(float/double)。    定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对    于int、double)对变量的取值区间和精度进行说明。    下面列举了Dev-C++下基本类型所占位数和取值范围:    符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输出符举例        -- -- char                            8 -2^7 ~ 2^7-1 %c %c、%d、%u            signed -- char                    8 -2^7 ~ 2^7-1 %c %c、%d、%u            unsigned -- char                8 0 ~ 2^8-1 %c %c、%d、%u            [signed] short [int]            16 -2^15 ~ 2^15-1 %hd            unsigned short [int]           16 0 ~ 2^16-1 %hu、%ho、%hx            [signed] -- int                    32 -2^31 ~ 2^31-1 %d            unsigned -- [int]                 32 0 ~ 2^32-1 %u、%o、%x            [signed] long [int]              32 -2^31 ~ 2^31-1 %ld            unsigned long [int]             32 0 ~ 2^32-1 %lu、%lo、%lx            [signed] long long [int]       64 -2^63 ~ 2^63-1 %I64d            unsigned long long [int]      64 0 ~ 2^64-1 %I64u、%I64o、%I64x            -- -- float                            32 +/- 3.40282e+038 %f、%e、%g            -- -- double                        64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g            -- long double                    96 +/- 1.79769e+308 %Lf、%Le、%Lg    几点说明:    1. 注意! 表中的每一行,代表一种基本类型。“[]”代表可省略。        例如:char、signed char、unsigned char是三种互不相同的类型;            int、short、long也是三种互不相同的类型。            可以使用C++的函数重载特性进行验证,如:            void Func(char ch) {}            void Func(signed char ch) {}            void Func(unsigned char ch) {}            是三个不同的函数。    2. char/signed char/unsigned char型数据长度为1字节;        char为有符号型,但与signed char是不同的类型。            注意! 并不是所有编译器都这样处理,char型数据长度不一定为1字节,char也不一定为有符号型。    3. 将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。        所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。            程序中若涉及位运算,也应该使用unsigned型变量。    4. char/signed char/unsigned char输出时,使用格式符%c(按字符方式);        或使用%d、%u、%x/%X、%o,按整数方式输出;            输入时,应使用%c,若使用整数方式,Dev-C++会给出警告,不建议这样使用。    5. int的长度,是16位还是32位,与编译器字长有关。        16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32            位。    6. 整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。        而格式符%u,表示unsigned,即无符号10进制方式。    7. 整型前缀h表示short,l表示long。        输入输出short/unsigned short时,不建议直接使用int的格式符%d/%u等,要加前缀h。            这个习惯性错误,来源于TC。TC下,int的长度和默认符号属性,都与short一致,            于是就把这两种类型当成是相同的,都用int方式进行输入输出。    8. 关于long long类型的输入输出:        "%lld"和"%llu"是Linux下gcc/g++用于long long int类型(64 bits)输入输出的格式符。            而"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。            Dev-C++使用的编译器是Mingw32,Mingw32是x86-win32 gcc子项目之一,编译器核心还是linux下的gcc。            进行函数参数类型检查的是在编译阶段,gcc编译器对格式字符串进行检查,显然它不认得"%I64d",            所以将给出警告“unknown conversion type character `I' in format”。对于"%lld"和"%llu",gcc理            所当然地接受了。            Mingw32在编译期间使用gcc的规则检查语法,在连接和运行时使用的却是Microsoft库。            这个库里的printf和scanf函数当然不认识linux gcc下"%lld"和"%llu",但对"%I64d"和"%I64u",它则是            乐意接受,并能正常工作的。    9. 浮点型数据输入时可使用%f、%e/%E或%g/%G,scanf会根据输入数据形式,自动处理。        输出时可使用%f(普通方式)、%e/%E(指数方式)或%g/%G(自动选择)。    10. 浮点参数压栈的规则:float(4 字节)类型扩展成double(8 字节)入栈。        所以在输入时,需要区分float(%f)与double(%lf),而在输出时,用%f即可。            printf函数将按照double型的规则对压入堆栈的float(已扩展成double)和double型数据进行输出。            如果在输出时指定%lf格式符,gcc/mingw32编译器将给出一个警告。    11. Dev-C++(gcc/mingw32)可以选择float的长度,是否与double一致。    12. 前缀L表示long(double)。        虽然long double比double长4个字节,但是表示的数值范围却是一样的。            long double类型的长度、精度及表示范围与所使用的编译器、操作系统等有关。        ====================================================================  (一)32位平台:   分为有符号型与无符号型。   有符号型:   short 在内存中占两个字节,范围为-2^15~(2^15-1)   int 在内存中占四个字节,范围为-2^31~(2^31-1)   long在内存中占四个字节,范围为-2^31~2^31-1   无符号型:最高位不表示符号位   unsigned short 在内存中占两个字节,范围为0~2^16-1   unsigned int 在内存中占四个字节,范围为0~2^32-1   unsigned long在内存中占四个字节,范围为0~2^32-1   实型变量:   分单精度 float 和双精度 double 两种形式:   float:占四个字节,提供7~8位有效数字。   double: 占八个字节,提供15~16位有效数字。     (二)16位平台:   1)整型(基本型):类型说明符为int,在内存中占2个字节。   2)短整型:类型说明符为short int或short。所占字节和取值范围均与整型(基本型)相同。   3)长整型:类型说明符为long int或long,在内存中占4个字节。   无符号型:类型说明符为unsigned。   无符号型又可与上述三种类型匹配而构成:   各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。   实型变量:   分为单精度(float型)、双精度(double型)和长双精度(long double型)三类。  单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。   双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。   长双精度型16 个字节(128位)内存空间,可提供18-19位有效数字。  ============================================================================  C语言中5种基本数据类型的存储空间长度的排列顺序:  char = signed char = unsigned char < short int = unsigned short int <= int = unsigned int <= long int = unsigned long int  <= long long int = unsigned long long int  float <= double <= long double  用short修饰int时,short int表示短整型,占2字节的数据位.用long修饰int时,long int表示长整型,占4字节的数据位,在vc++6.0中int的数据类型也是占用了4字节的数据位,  那么应用int型与long型有什么区别呢? 下面就让我们来解答这个问题.我们知道现在的C++开发工具非常的多,int型在不同的系统中有可能占用的字节数会不一样, 而short与long修饰的int型的字节数是固定的,任何支持标准C++编译系统中都是如此.所以如果需要编写可移植性好的程序,应该将整型数据声明为short与long修饰的int型。





----------------------------------------------------------------------------------------
在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

4. C语言词汇

  • 六类:标识符,关键字,运算符,分隔符,常量,注释符
  1. 标志符:在前后相继中应用的变量,函数名,标号等统称为标志符。除库函数的函数名由系统定义外,其他都由客商定义。C 规定,标志符只好是字母(A~Z,a~z)、数字(0~9卡塔 尔(英语:State of Qatar)、下划线(卡塔 尔(英语:State of Qatar)组成的字符串,并且第一个字符必得是字母恐怕下划线(说来讲去不可能是数字卡塔尔

  2. 第一字:是由C语言规定的保有特定意义的字符串,平时也称之为保留字。顾客定义的标志符不应与重大字同名
    1) 类型表明符:用于定义、表达变量、函数或任何数据结构的等级次序;如 int double等
    2) 语句定义符:用于表示一个言语的功能;if else 条件语句
    3) 预管理命令字:用于表示三个预管理命令; include等

  3. 运算符:C语言中包罗一定充足的运算符。运算符与变量,函数一齐组成表明式,表示各样运算效率。运算符由二个或四个字符组成
  4. 相隔符:有逗号和空格三种。逗号首要用在档期的顺序表达和函数参数表中,分隔各类变量。空格多用于语句各单词之间,做距离符
  5. 常量:C语言中运用的常量可分为数字常量,字符常量,字符串常量,符号常量,转义字符等多样
  6. 注释符:“/* */” 多行注释 # 单行注释

整型数据

1.骨干数据类型

第2章 数据类型,运算符,表明式

1.整型常量

整型常量便是整常数,C语言中的常整数有八进制,十四进制,十进制二种。
(1卡塔尔国十进制整常数:十进制常整数未有前缀,其数据为0~9

  • 法定的十进制整常数,123,2,4356,-100.
  • 非法的十进制整常数:078,78A(含有非十进制数码卡塔尔国
  • 在程序中种种前缀用来区分各类进制数。
    (2卡塔 尔(阿拉伯语:قطر‎八进制常整数:八进制整数必得以0初步,即以0作为八进制数的前缀。数码为0~7。八进制平日是无符号数。
  • 合法的八进制整常数:015(13卡塔 尔(英语:State of Qatar),0101(64卡塔 尔(英语:State of Qatar),0177777(65535卡塔尔国
  • 违规的八进制整常数:256,03A2,-0127
    (3卡塔尔国十九进制整常数:十四进制整常数的前缀为0X或0x,其数量为09,af或A~F,
  • 官方的十九进制整常数:0X2A(42),0XA0(160),0XFFFF(65535)
  • 专擅的十一进制整常数:5A,0X3H

  基本数据类型最要害的表征是,其值不得以再解释为任何项目。相当于说,基本数据类型是本身表达的。

1. C语言的数据类型

  • 可分为:基本数据类型,构造数据类型,指针类型,空类型
  1. 宗旨数据类型:其值无法再解释别的类别,
  2. 结构数据类型:是依附已定义多少个或多个数据类型用构造的点子来定义的。三个构造类型的值可以分解成三个“成员”或“成分”。每一种成员都以几在那之中坚数据类型或又是一个构造类型。构造类型:数组类型,结构类型,联合项目
  3. 指针类型:其值用来代表某些量在内部存款和储蓄器存款和储蓄器中的地址
  4. 空类型:在调用函数值时,平常应向调用者重回一个函数值,类型表达符为:void

对此基本数据类型量,按其取值是或不是能够变动分为变量和常量;在程序施行中,其值不发生更动的量称为常量,反之;可分为:整型常量,整型变量,浮点常量,浮点变量,字符常量,字符变量,枚举常量,枚举变量。在程序中,常量是足以不经表达而一贯引用的,而变量则必需先表明后选取

实型数据

  • 十进制数情势:由0~9和小数点组成
  • 合法实数:0.0,0.12,4.567,-256.123 (必需有小数点)
  • 指数格局:由十进制数加阶码标识“e”或“E”以致阶码组成。
  • 其相仿格局为: a E n (a 为十进制数,n为十进制整数)
  • 其值为 a10^n.
    如:2.1e5(2.1
    10^5) 3.7e-2(3.710^-2) 0.5e7(0.510^7)

2.构造数据类型构造数据类型

2. 整型量

  • 整型量包含整型常量、整型变量。整型常量正是整常数:八进制,十三进制,十进制
    二进制到八进制转换
    1 100 011 100 110
    1 4 3 4 6
    二进制到十二进制转变:
    1 1000 1110 0110
    1 8 E 6
  1. 整型常量
    1) 八进制整常数八进制整常数必需为0从头,即以0作为八进制数的前缀。数码取值为0~7,八进制常常是无符号数
    015(十进制为13卡塔尔 0101(65卡塔尔国
    2) 十八进制整常数的前缀为0X或0x。数码取值 0~9,A~F 或 a~f
    0X2A(十进制13) 0XA0(160)
    3) 十进制整常数未有前缀。数码取值 0~9

十进制无符号整常数的界定为 0~65535 有号子数为 -32768~32767 ; 八进制无符号数的象征范围为 0~0177777 ; 十二进制无符号数的表示范围为 0X0~0XFFFF 或 0x0~0xFFFF
假若选拔的数额抢先了上述范围,就非得用长整型数来表示。长整型数是用后缀 "L" 或 "l"
十进制长整常数 158L (十进制为158) 358000L(十进制为 -358000)
八进制长整常数 012L (十进制为 10) 077L (十进制为 63)
十二进制进制长整常数 0X15L (十进制为 21) 0X10000L (十进制为 65536)
整型常数的无符号数的后缀为 “U” 或 “u”

  1. 整型变量
    1) 基本型:int 在内部存款和储蓄器中占 2 个字节,其取值为基本整常数 -32768~32768
    2) 短整量:short int 同基本型 -32768~32768
    3) 长整型:long int 或 long 在内部存储器中占4个字节,其取值为长整常数 -32768~32768
    4) 无符号型:unsigned
  • 变量表明的貌似格局:类型表达符 变量名称标志符 …:

<wiz_code_mirror>

 

 

 

 

 

 1 int a, b, c // (a,b,c 为整型变量) 2 long x, y // (x,y 为长整型变量) 

 

 

  • 注意:
    1.允许在一个品种表明符后,表明多少个同样档期的顺序的变量。各变量之间用逗号 间距,类型表明符与变量名之间起码用三个空格间距
    2.说起底叁个变量名之后必需以“;”号最终
    3.变量表明必得在变量使用以前,通常放在函数体的伊始部分

实型变量

(1卡塔 尔(阿拉伯语:قطر‎实型变量实型数据在内部存款和储蓄器中的贮存情势

  • 实型数据貌似占4个字节。按指数格局储存。
    |符号位 |小数部分 |指数部分 |
    小数部分占的位越来越多,数的有效性数字越多,精度越高
    指数部分占的位数更多,数能代表的限量越大。

    (2卡塔尔实型变量的分类
  • 单精度(float卡塔尔,双精度(double型卡塔尔国,长双精度(long double型卡塔尔三类

  是基于已定义的三个或三个数据类型用构造的措施来定义的。也正是说,三个构造类型的值能够分解成若干个“成员”或“成分”。各类“成员”都以八个主干数据类型或又是一个构造类型。在C语言中,构造类型有以下两种: ·数组类型 ·结构类型 ·联合项目

3. 实型量

  1. 实型常量:实型也称为 浮点型;实型常量也可以称作实数可能浮点数;十进制数方式和指数形式
    1) 十进制数方式:由数据 0~9 和小数点组成
    2) 指数格局:由十进制数,加阶码标记“e”或“E”以致阶码组成(其相符格局为a E n (a为十进制数,n为十进制整数卡塔 尔(阿拉伯语:قطر‎其值为 a10,n 如: 2.1E5 (等于2.110,5))
  2. 实型变量:单精度型和双精度型
    1) 单精度表明符:float 在C中单精度型占4个字节(三九位)内部存款和储蓄器空间,其数值范围为3.4E-38~3.4E+38,只可以提供八位有效数字;
    2) 双精度表达符:double 双精度型占8个字节(63人)内部存款和储蓄器空间,其数值范围为1.7E-308~1.7E+308,可提供拾伍个人有效数字
    3) 实型变量表达的格式和书写规格与整型相通

字符变量

字符数据在内部存储器中的囤积格局及采用方法。
每一个字符变量被分配一个字节的长空,因而只可以寄存二个字符。字符值是以ASCII码的款型存放在内存单元中的。

#include <stdio.h>
int main()
{
    char a,b;
    a = 120;
    b = 121;
    printf("%c,%cn",a,b);
    printf("%d,%dn",a,b);
    return 0;
}

a=x b=y
a=120 b=121

3.指针类型

4. 字符型量

  • ##### 字符常量包罗字符常量和字符变量
  1. 字符常量:是用单引号括起来的三个字符。'a' 'b' '+' '?' 都是官方的字符常量
    1) 字符常量只好用单引号括起来,不能够用双引号或其余括号
    2) 字符常量只可以是个单个字符,不能是字符串
    3) 字符能够是字符集任性字符,但数字被定义为字符后就不能够参入数值运算
  2. 转义字符:转义字符以反斜线""初阶,后跟二个或几个字符
转义字符 转义字符的意义
n 回车换行
t 横向跳到下一制表位置
v 竖向跳格
b 退格
r 回车
f 走纸换页
反斜线符""
' 单引号符
a 鸣铃
ddd 1~3位八进制数所代表的字符
xhh 1~2位十六进制数所代表的字符
  1. 字符变量:的取值是字符常量,即单个字符。字符变量的种类证明符是 char。
    1) 如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b付与'x'和'y'值: a='x';b='y';实际上是在a,b四个单元内部存款和储蓄器放120和121的二进制代码: a 0 1 1 1 1 0 0 0
         b 0 1 1 1 1 0 0 1
  2. 字符串常量:是由生机勃勃对双引号括起的字符类别,"charn" "REBT";字符串常量和字符常量是例外的量:
    1) 字符常量由单引号 括起来,字符串常量由双引号 括起来
    2) 字符常量只好是单个字符,字符串常量则能够含多个或多少个字符
    3) 能够把多少个字符常量赋值三个字符变量,但无法把一个字符串常量赋予一个字符变量;可是足以用二个字符数组来寄存三个字符串常量
    4) 字符常量占贰个字节 的内部存款和储蓄器空间,字符串常量占的内部存款和储蓄器字节数等于字符串字节数加1,扩展的叁个字节寄存字符"",这是字符串结束的标识
  3. 标记常量:能够用一个标志符来代表二个常量,在选取前必需先定义,其格局: #define 标志符 常量(宏定义命令)

字符串常量和字符常量是见仁见智的量.他们有以下分别

  • 字符常量是由单引号括起来的,字符串常量是由双引号括起来的
  • 字符常量只好是单个字符,字符串常量则含有三个火多少个字符.
  • 能够呢叁个字符常量付给一个字符变量,但不能把一个字符串常量付给贰个字符变量.在C语言中尚无对景挂画的字符串变量。咱们用三个字符数组在寄放一个字符变量。
  • 字符占贰个字节的内部存款和储蓄器空间.字符串常量占的内部存款和储蓄器字节数等于字符串中的字节数加风流浪漫.日增的一个字节用于贮存字符'',这是字符串的终结标识。

   指针是生机勃勃种奇特的,同有时间又是负有举足轻重意义的数据类型。其值用来表示某个量在内部存款和储蓄器储器中的地址。即使指针变量的取值肖似于整型量,但这是四个体系完全分裂的量,因而无法歪曲。4.空品类在调用函数值时,平日应向调用者重返一个函数值。那些重回的函数值是装有一定的数据类型的,应在函数定义及函数表达中 给以表达,举例在例题中提交的max函数定义中,函数头为: int max(int a,int b);当中“int ”类型表明符即表示该函数的重回值为整型量。又如在例题中,使用了库函数 sin,由于系统分明其函数重返值为双精度浮点型,因而在赋值语句s=sin (x);中,s 也必得是双精度浮点型,以便与sin函数的重回值风姿罗曼蒂克致。所以在印证部分,把s表达为双精度浮点型。然则,也是有意气风发类函数,调用后并不供给向调用者重临函数 值, 这种函数能够定义为“空类型”。其项目表达符为void。在第五章函数中还要详细介绍。在本章中,大家先介绍中央数据类型中的整型、浮点型和字符型。其他类型在这里后各章中穿插介绍。

5. 变量的伊始值和类型转换

  1. 变量赋初值:平常须要对变量赋初值,以便利用变量;
    类不要声明符 变量1 = 值1, 变量2 = 值2···;

<wiz_code_mirror>

 

 

 

 

 

1 int a = 4, b = 2;
2 char = ch1 = 's', ch2 = 'a';
3 int a = b = c = 4;        // error 不允许连续赋值

 

 

 

  1. 变量类型的转移:变量的数据类型是可以转变的,自动调换 和 强制调换
    1) 电动调换:发生在差异数据类型的量在混合运算时,由编写翻译系统自动完成,准则:
    · 若参预运算量的品种分化,则先转变到群集类型,然后进行演算
    · 转换按多长扩展的矛头打开,以担保精度不下滑。如 int型和long型运算时,先把int量转成long型后在实行演算
    · 全部的浮点运算都以以双精度进行的,尽管仅含float单精衡量运算的表达式,也要转成double型,再做运算
    · char型和short型到场运算时,必需先转换成int型
    · 在赋值运算中,赋值号两边量的数据类型区别一时间,赋值号左边量的项目将转移为左侧量的档期的顺序,若是右侧量的数据类型长度左边长时,将错过意气风发部分数目,那样会骤降精度,遗失的一些按四舍五入向前舍入
    2) 强制转换:是透过类型转形成兑现的,平常格局:(类型表达符) (表达式) 其功用是把表明式的运算结果强制转变来类型表明符所表示的花色;
    比方说:(float) a 把a调换为实型; (int) (x+y) 把x+y的结果运算结果强制调换为整型
    · 类型表明符和表明式都不得不加括号(单个变量能够不加括号卡塔尔,
    · 无论是强制转变或是自动转变,都只是为了此次运算的内需而对变量的数额长度举行的暂行转变,而不改变多少印证时对该变量定义的类型

各种数据类型的插花运算

(1) 若出席运算量的档案的次序分化,则先转变来同少年老产物种然后进行运算.
(2)转变按数量长度扩充的样子扩充,以确定保障精度不下跌,如int与long运算时,先把int转换为long,然后开展览演出算。
(3)全部的浮点型运算都以以双精度进行的,纵然仅含float单精衡量运算的表达式,也要先转移为double型,然后开展览演出算。
(4)char型和short运算时,必需先转移为int
(5)在赋值运算时,赋值号两侧量的数据类型不一致期,赋值号左边的量的类型调换为侧面量的类型.如若侧面量的数据类型长度超越左侧的,则会扬弃生机勃勃部分数额,那样会减低精度,遗失的有的四舍五入.

![Upload Paste_Image.png failed. Please try again.]

  对于着力数据类型量,按其取值是不是可改造又分为常量和变量二种。在程序实行过程中,其值不爆发转移的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。比如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常 量、字符变量、枚举常量、枚举变量。在程序中,常量是能够不经表达而平昔引用的,而变量则必得先表明后使用。

6. 宗旨运算符和表明式[1]

  1. 优先级和结合性:运算符的演算优先级分为15级,优先级较高的早日优先级低的伸开演算,而在三个运算量两则的运算符优先级相似期,则按运算符的结合性:即左结合性(自左向右)右结合性(自右向左)
  2. 算术运算符和算术表明式基本的算术运算符
    1) 加法运算符"+" :双眼运算符,即应当五个量参预加法运算,具有右结合性
    2) 减法运算符"-" :双眼运算符,但'-'也可看做负值运算符,那个时候为单目运算符,具有左结合性
    3) 乘法运算符" * " :双眼运算符,具备左结合性
    4) 除法运算符"/" :双目运算符,参预运算量均为整型时,结果也为整型,舍去小数;假若运算量中有叁个是实型,则结果位双精度实型,具备左结合性
    5) 求余运算符"%" :双眼运算符,须求加入运算的量均为整型,求余运算的结果非凡两数相除后的余数,具备左结合性
  3. 自增自减运算符:自增1运算符记为"++",其作用是使变量的值自增1,自减1运算符记为"--",其职能是使变量值自减1;自增1,自减1运算符均为单目运算符,具备右结合性
    · ++i i自增1后再参预任何运算
    · --i i自减1后再参预此外运算
    · i++ i参预运算后,i的值再自增1
    · i-- i到场运算后,i的值再自减1
  4. 算术表明式:由算术运算符和括号连接起来的架子,比方:
    (a2)/c (x+r)8-(a+b)/7  ++i sin(x)+sin(y)  (++i)-(j++)+(k--)

  5. 赋值运算符和赋值表明式:容易的赋值运算符记为"="。由 "="连接的架势称为赋值表明式,格局:变量 = 表达式;赋值表达式的功用是测算表明式的值再付与左侧的变量。赋值运算符具有右结合性。因此a=b=c=5 可以知道晓为 a=(b=(c=5))

  6. 复合赋值符及表明式:在赋值符"="在此以前拉长其它双眼运算符可构成复合赋值符;构成复合赋值表明式的款式:变量 双目运算符 = 表达式 它等效于 变量 = 变量 运算符 表达式

  7. 逗号运算符:"," 其效劳是把多个表达式连接起来组成三个表明式,一般情势:表达式1,表达式2···

强制类型调换

  • 强制类型调换是透过类型调换运算来落到实处的。
  • 其貌似格局为:
    (类型表明符卡塔 尔(英语:State of Qatar)(表明式卡塔 尔(阿拉伯语:قطر‎
    其功效是吧表明式的运算结果强制转换成类型表达符所表示的品类
    int a;
    (float) a; //把a转变为实型
    (int) (x+y) //把x+y的结果转换为整型
    注意:
    (1卡塔尔国类型表达符和表明式都必得加括号(单个变量能够不加卡塔 尔(阿拉伯语:قطر‎,
    (2卡塔尔国无论是强制类型调换依旧自动转换,都只是为了此次运算的内需对变爱玲的数量长度进行不经常替换,并非改换变量的种类。

整型量

小结

  • C的数据类型:
    着力类型 构造类型 指针类型 空类型
  • 主干项指标归类及特点:
类型说明符 字节 数值范围
字符型 char 1 C字符集
基本整型 int 2 -32768~32767
短整型 short int 2 -32768~32767
长整型 long int 4 -214783648~214783647
无符号型 unsigned 2 0~65535
无符号长整型 unsigned long 4 0~4294967295
单精度实型 float 4 3/4E-38~3/4E+38
双精度实型 double 8 1/7E-308~1/7E+308
  • 常量后缀:
    L或l 长整型
    U或u 无符号数
    F或f 浮点数
  • 常量类型:
    板寸 长整数 无符号数 浮点数 字符 字符串 符号常数 转义字符
  • 数据类型转变:
    · 自动调换:在区别类型数据的插花运算中,由系统自动完毕转移,由少字节类型向多字节类型转变。不相同类型的量相互赋值时也由系统自动实行调换,把赋值号右侧的类型转变为左侧包车型大巴花色
    · 强制转变:由强制转变运算符姣好更改
  • 运算符优先级和结合性:
    诚如来说,单目运算符优先级较高,赋值运算符事先级低;算术运算符开始时期级较高,波及和逻辑运算符预先级超级低;多数运算符具备左结合性,单目运算符,三目运算符、赋值
  • 表达式:
    是由运算符连接常量、变量、函数所组成的姿势。各样表达式都有一个指和类型。表达式求值按运算符的优先级和结合性所规定的依次进行~~~~

整型量包蕴整型常量、整型变量。整型常量就是整常数。在C语言中,使用的整常数有八进制、十五进制和十进制两种。

整型常量

1.八进制整常数八进制整常数必得以0最初,即以0作为八进制数的前缀。数码取值为0~7。八进制数平常是无符号数。 以下各数是法定的八进制数: 015(十进制为13) 0101(十进制为65) 0177777(十进制为65535) 以下各数不是法定的八进制数: 256(无前缀0) 03A2(满含了非八进制数码) -0127(现身了负号)

2.十八进制整常数 十二进制整常数的前缀为0X或0x。其数据取值为0~9,A~F或a~f。 以下各数是合法的十二进制整常数: 0X2A(十进制为42)  0XA0 (十进制为160)  0XFFFF (十进制为65535) 以下各数不是合法的十八进制整常数: 5A (无前缀0X)  0X3H (含有非十二进制数码)

3.十进制整常数 十进制整常数未有前缀。其数额为0~9。 以下各数是官方的十进制整常数: 237 -568 65535 1627 以下各数不是合法的十进制整常数: 023 (不可能有前导0) 23D (含有非十进制数码)

在程序中是依照前缀来差距各样进制数的。因而在书写常数时毫无把前缀弄错变成结果不正确。

4.整型常数的后缀在十五个人字长的机器上,基本整型的尺寸也为 十三位,由此表示的数的范围也有约束的。十进制无符号整常数的界定为0~65535,有暗号数为-32768~+32767。八进制无符号数的意味范围 为0~0177777。十七进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数超越了上述范围,就一定要用长整型数来表 示。长整型数是用后缀“L”或“l”来代表的。举例: 十进制长整常数 158L (十进制为158) 358000L (十进制为-358000) 八进制长整常数 012L (十进制为10) 077L (十进制为63) 0二〇〇一00L (十进制为65536) 十二进制长整常数 0X15L (十进制为21) 0XA5L (十进制为165) 0X10000L (十进制为65536)
长整数158L和主题整常数158 在数值上并无差异。但对158L,因为是长整型量,C编写翻译系统将为它分配4个字节存款和储蓄空间。而对158,因为是骨干整型,只分红2 个字节的仓储空间。因而在运算和出口格式上要付与注意,幸免失误。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。比如: 358u,0x38Au,235Lu 均为无符号数。前缀,后缀可同不常候利用以表示各体系型的数。如0XA5Lu表示十七进制无符号长整数A5,其十进制为165。

整型变量

整型变量可分为以下几类: 1.基本型 类型表达符为int,在内部存款和储蓄器中占2个字节,其取值为基本整常数。 2.短整量 类型表明符为short int或short'C110F1。所占字节和取值范围均与基本型相符。 3.长整型 类型表明符为long int或long ,在内部存款和储蓄器中占4个字节,其取值为长整常数。 4.无符号型 类型表明符为unsigned。 无符号型又可与上述三种档次匹配而重新整合: (1)无符号基本型 类型表达符为unsigned int或unsigned。 (2)无符号短整型 类型表明符为unsigned short (3)无符号长整型 类型表明符为unsigned long 各类无符号类型量所占的内部存款和储蓄器空间字节数与相应的有号子类型量相通。但出于省去了标记位,故无法表示负数。 下表列出了Turbo C中各队整型量所分配的内部存款和储蓄器字节数及数的表示范围。 类型表达符    数的范围     分配字节数 int       -32768~32767     ■■ short int    -32768~32767     ■■ signed int    -32768~32767     ■■ unsigned int   0~65535        ■■ long int  -2147483648~2147483647  ■■■■ unsigned long  0~4294967295     ■■■■ 整型变量的印证 变量表明的相仿方式为: 类型表达符 变量名标记符,变量名标志符,...; 比如: int a,b,c; (a,b,c为整型变量) long x,y; (x,y为长整型变量) unsigned p,q; (p,q为无符号整型变量)

在挥洒变量表达时,应小心以下几点: 1.同目的在于三个类不要表达符后,表达七个生龙活虎律类其余变量。各变量名之间用逗号间距。类型表达符与变量名之间起码用四个空格间距。 2.终极一个变量名之后必得以“;”号最终。 3.变量表达必需放在变量使用早先。平时放在函数体的启幕部分。     x, y是长整型变量,a, b是骨干整型变量。它们之间允许开展览演出算,运算结果为长整型。但c,d被定义为主干整型,由此最后结果为主旨整型。本例表明,分歧类型的量足以出席运算并 相互赋值。个中的类型调换是由编写翻译系统自动实现的。有关类型转换的平整将要随后介绍。

实型量

实型常量

实型也叫做浮点型。实型常量也称为实数恐怕浮点数。在C语言中,实数只行使十进制。它有两种方式: 十进制数形式指数格局 1.十进制数情势 由数码0~ 9和小数点组成。举个例子:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为法定的实数。 2.指数方式由十进制数,加阶码标识“e”或“E”甚至阶码(只好为整数,能够带符号卡塔 尔(阿拉伯语:قطر‎组成。其貌似方式为a E n (a为十进制数,n为十进制整数卡塔 尔(阿拉伯语:قطر‎其值为 a*10,n 如: 2.1E5 (等于2.1*10,5), 3.7E-2 (等于3.7*10,)-2*) 0.5E7 (等于0.5*10,7), -2.8E-2 (等于-2.8*10,)-2*)以下不是合法的实数 345 (无小数点) E7 (阶码标记E此前无数字)  -5 (无阶码标识) 53.-E3 (负号地方不对) 2.7E (无阶码) 规范C允许浮点数使用后缀。后缀为“f”或“F”即意味着该数为浮点数。如356f和356.是等价的。例2.2表明了这种情形: void main() { printf("%fn%fn",356.,356f); } void 指明main不回来任何值 利用printf显示结果 结束

实型变量

实型变量分为两类:单精度型和双精度型, 其品种表达符为float 单精度表达符,double 双精度表明符。在Turbo C中单精度型占4个字节(叁拾一人卡塔尔国内部存款和储蓄器空间,其数值范围为3.4E-38~3.4E+38,只可以提供八个人有效数字。双精度型占8 个字节(67人卡塔 尔(英语:State of Qatar)内部存款和储蓄器空间,其数值范围为1.7E-308~1.7E+308,可提供十三位有效数字。 实型变量表明的格式和书写法则与整型相仿。 举例: float x,y; (x,y为单精度实型量) double a,b,c; (a,b,c为双精度实型量) 实型常数不分单、双精度,都按双精度double型管理。 void main(){ float a; double b; a=33333.33333; b=33333.33333333333333; printf("%fn%fn",a,b); } 此程序表达float、double的不及 a ■■■■ b ■■■■■■■■ a<---33333.33333 b<---33333.33333333333;; 展现程序结果 此程序表明float、double的例外 float a; double b; a=33333.33333; b=33333.33333333333333; 从本例能够见到,由于a 是单精度浮点型,有效位数唯有五人。而整数已占八位,故小数几个人后从此未来均为无用数字。b 是双精度型,有效位为13个人。但Turbo C 规定小数后最多保留陆位,其他部分四舍五入。

字符型量

字符型量包蕴字符常量和字符变量。

字符常量 字符常量是用单引号括起来的四个字符。举个例子'a','b','=','+','?'都以合法字符常量。在C语言中,字符常量有以下特点: 1.字符常量只可以用单引号括起来,无法用双引号或别的括号。 2.字符常量只好是单个字符,不能是字符串。 3.字符能够是字符聚集放肆字符。但数字被定义为字符型之后就 无法参与数值运算。如'5'和5 是莫衷一是的。'5'是字符常量,不可能出席运算。

转义字符 转义字符是一种新鲜的字符常量。转义字符以反斜?quot;"最初,后跟二个或几个字符。转义字符具有一定的意义,区别于字符原有的意义,故称“转义” 字符。比如,在头里各例题printf函数的格式串中用到的“n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来代表那么些用平常字符不便于 表示的调整代码。 常用的转义字符及其含义 转义字符  转义字符的意义 n      回车换行 t      横向跳到下大器晚成制表地方 v      竖向跳格 b      退格 r      回车 f      走纸换页 \      反斜线符"" '      单引号符 a      鸣铃 ddd     1~3位八进制数所代表的字符 xhh     1~2位十四进制数所代表的字符 广义地讲,C语言字符聚焦的别的三个字符均可用转义字符来表示。表2.2中的ddd和xhh正是为此而提议的。ddd和hh分别为八进制和十三进制的 ASCII代码。如101表示字?quot;A" ,102意味字母"B",134象征反斜线,XOA代表换行等。转义字符的使用 void main() { int a,b,c; a=5; b=6; c=7; printf("%dnt%d %dn %d %dtb%dn",a,b,c,a,b,c); } 此程序演习转义字符的接纳a、b、c为整数 5->a,6->b,7->c 调用printf突显程序运营结果 printf("%dnt%d %dn %d %dtb%dn",a,b,c,a,b,c); 程序在首先列输出a值5之后正是“n”,故回车换行;接着又是“t”,于是跳到下豆蔻梢头制表地点(设制表地点间隔为8卡塔尔,再出口b值6;空二格再出口c 值7后又是"n",因而再回车换行;再空二格之后又输出a值5;再空三格又输出b的值6;再次后"t"跳到下意气风发制表地点(与上风姿浪漫行的6 对齐卡塔尔国,但下生龙活虎转义字符“b”又使退回生机勃勃格,故紧挨着6再出口c值7。

字符变量 字符变量的取值是字符常量,即单个字符。字符变量的门类表明符是char。字符变量类型表达的格式和书写准绳都与整型变量相符。 比方: char a,b; 每种字符变量被分配一个字节的内部存款和储蓄器空间,由此必须要寄存一个字符。字符值是以ASCII码的花样存放在变量的内部存款和储蓄器单元之中的。如x的 十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b授予'x'和'y'值: a='x';b='y';实际上是在a,b七个单元内部存款和储蓄器放120和121的二进制代码: a 0 1 1 1 1 0 0 0 b 0 1 1 1 1 0 0 1 据此也得以把它们充当是整型量。 C语言允许对整型变量赋以字符值,也同意对字符变量赋以整型值。在输出时, 允许把字符变量按整型量输出,也同意把整型量按字符量输出。 整型量为二字节量,字符量为单字节量,当整型量按字符型量管理时, 独有低两个人字节插足拍卖。 main(){ char a,b; a=120; b=121; printf("%c,%cn%d,%dn",a,b,a,b); } a ■ b ■ a <-- 120 b <--- 121 展现程序结果 char a,b; a=120; b=121; 本程序中表明a,b为字符型,但在赋值语句中赋以整型值。从结果看,a,b值的输出格局决计于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。 void main(){ char a,b; a='x'; b='y'; a=a-32; b=b-32; printf("%c,%cn%d,%dn",a,b,a,b); } a,b被验证为字符变量并予以字符值 把小写字母换来大写字母 以整型和字符型输出 本例中,a,b被申明为字符变量并付与字符值,C语言允许字符变量参预数值运算,即用字符的ASCII 码参加运算。由于大小写字母的ASCII 码相差32,由此运算后把小写字母换到大写字母。然后分别以整型和字符型输出。

字符串常量 字符串常量是由后生可畏对双引号括起的字符种类。举个例子: "CHINA" ,"C program: , "$12.5" 等都以合法的字符串常量。字符串常量和字符常量是见仁见智的量。它们之间首要有以下分别: 1.字符常量由单引号括起来,字符串常量由双引号括起来。 2.字符常量只能是单个字符,字符串常量则能够含四个或八个字符。 3.能够把三个字符常量授予叁个字符变量,但无法把多少个字符串常量给予二个字符变量。在C语言中从不对景挂画的字符串变量。 那是与BASIC 语言差异的。可是能够用三个字符数组来存放在二个字符串常量。在数组生龙活虎章内授予介绍。 4.字符常量占二个字节的内部存款和储蓄器空间。字符串常量占的内部存款和储蓄器字节数等于字符串中字节数加1。扩充的一个字节中寄存字符""(ASCII码为0)。那是字符 串停止的标记。例如,字符串 "C program"在内部存款和储蓄器中所占的字节为:C program。字符常量'a'和字符串常量"a"纵然都唯有二个字符,但在内部存款和储蓄器中的意况是莫衷一是的。 'a'在内部存款和储蓄器中占贰个字节,可代表为:a "a"在内部存款和储蓄器中占一个字节,可代表为:a符号常量

标识常量 在C语言中,能够用四个标志符来表示叁个常量,称之为符号常量。符号常量在使用此前必需先定义,其相通方式为: #define 标识符 常量 其中#define也是一条预管理命令(预管理命令都?quot;#9159.com,"发轫卡塔尔国,称为宏定义命令(在第楚辞预管理程序校官进一层介绍卡塔尔国,其效力是把该标志符 定义为事后的常量值。大器晚成经定义,现在在前后相继中负有现身该标志符之处均代之以该常量值。习于旧贯上符号常量的标记符用大写字母,变量标志符用小写字母,以示分裂。 #define PI 3.14159 void main(){ float s,r; r=5; s=PI*r*r; printf("s=%fn",s); } 由宏定义命令定义PI 为3.14159 s,r定义为实数 5->r PI*r*r->s 突显程序结果 float s,r; r=5; s=PI*r*r; 本程序在主函数早先由宏定义命令定义PI 为3.14159,在程序中即以该值代替PI 。s=PI*r*r等效于s=3.14159*r*r。应该专一的是,符号常量不是变量,它所表示的值在全体功用域内无法再变动。也正是说,在前后相继中,无法再用赋值语句对它再一次赋值。

变量的初值和类型转换

变量赋初值 在前后相继中时时须求对变量赋初值,以便利用变量。语言程序中可有各个办法,在概念时赋以初值的方式,这种办法称为初步化。在变量表达中赋初值的经常格局为: 类型表明符 变量1= 值1,变量2= 值2,……; 比如: int a=b=c=5; float x=3.2,y=3f,z=0.75; char ch1='K',ch2='P'; 应注意,在证实中不容许一连赋值,如a=b=c=5是违法的。 void main(){ int a=3,b,c=5; b=a+c; printf("a=%d,b=%d,c=%dn",a,b,c); } a<---3,b<--0,c<---5 b<--a+c 突显程序运维结果

变量类型的更动 变量的数据类型是足以转换的。转换的措施有二种, 生龙活虎种是自行转变,生机勃勃种是威吓转变。

机关转变自动调换爆发在分化数据类型的量混合运算时,由编写翻译系统自动实现。自动转变坚守以下法规: 1.若出席运算量的门类不一致,则先转换到同意气风发品种,然后实行演算。 2.转移按数据长度扩充的动向进行,以作保精度不裁减。如int型和long型运算时,先把int量转成long型后再张开演算。 3.全部的浮点运算都以以双精度举办的,尽管仅含float单精测量运算的表明式,也要先调换成double型,再作运算。 4.char型和short型参与运算时,必需先转变来int型。 5.在赋值运算中,赋值号两侧量的数据类型差异一时间, 赋值号左边量的项目将转移为右侧量的项目。 要是右侧量的数据类型长度左侧长时,将错失大器晚成部分数目,那样会减低精度, 错失的有的按四舍五入向前舍入。图2 1意味了品种自动转变的平整。 void main(){ float PI=3.14159; int s,r=5; s=r*r*PI; printf("s=%dn",s); } PI<--3.14159 s<--0,r<--5 s<--r*r*PI 呈现程序运行结果 float PI=3.14159; int s,r=5; s=r*r*PI; 本例程序中,PI为实型;s,r为整型。在试行s=r*r*PI语句时,r和PI都转变到double型总结,结果也为double型。但出于s为整型,故赋值结果仍然为整型,舍去了小数部分。

强制类型转换 强制类型转换是透过类型转变运算来贯彻的。其貌似形式为: (类型表达符) (表明式) 其功能是把表明式的演算结果强制转换来类型表明符所表示的门类。举个例子: (float) a 把a转变为实型(int)(x+y) 把x+y的结果调换为整型在运用强制转变时应注意以下难点: 1.类型表达符和表明式都必须加括号(单个变量能够不加括号),如把(int)(x+y)写成(int)x+y则成了把x转变到int型之后再与y相加了。 2.无论是强制调换或是自动调换,都只是为着本次运算的要求而对变量的数额长度举行的暂且调换,而不退换多少评释时对该变量定义的品种。 main(){ float f=5.75; printf("(int)f=%d,f=%fn",(int)f,f); } f<--5.75 将float f强制调换到int f float f=5.75;printf("(int)f=%d,f=%fn",(int)f,f); 本例注解,f虽强制转为int型,但只在运算中起效果, 是有时的,而f自己的门类并不变。由此,(int)f的值为 5(删去了小数)而f的值仍然为5.75

  程序中使用的各种变量都应预先加以定义,即先定义,后使用。对变量的定义可以包括三个方面:数据类型、存储类型、作用域。

顾客存款和储蓄空间能够分成多个部分:

  1. 程序区;
  2. 静态存款和储蓄区;
  3. 动态存款和储蓄区;

从变量的效用域(即从半空卡塔 尔(英语:State of Qatar)角度来分,可以分为全局变量清劲风姿罗曼蒂克部分变量。

从变量值存在的作时间(即生存期卡塔尔国角度来分,能够分成静态存款和储蓄情势和动态储存方式。
    静态存款和储蓄方式:是指在程序运行时期分配一定的积攒空间的主意。
    动态积累方式:是在程序运转时期依照必要张开动态的分红存款和储蓄空间的不二秘诀。

  全局变量全体寄存在静态存款和储蓄区,在前后相继初阶实行时给全局变量分配存款和储蓄区,程序行终止就释放。在程序推行进程中它们据有一定的存款和储蓄单元,而不动态地进行分红和假释;

  动态存款和储蓄区寄放以下数据:

  1. 函数方式参数;
  2. 活动变量(未加static表明的部分变量卡塔 尔(英语:State of Qatar);
  3. 函数调用实的当场保卫安全定和谐重返地址;

对上述这个数据,在函数开头调用时分配动态储存空间,函数甘休时释放那么些空间。在c语言中,每一个变量和函数有八个天性:数据类型和数量的蕴藏种类。

为了进步效用,C语言允许将一些变量得值放在CPU中的存放器中,这种变量叫“贮存器变量”,用关键字register作声明。

PS:

  1. 独有风流倜傥对自动变量和式样参数能够看作贮存器变量;
  2. 一个Computer体系中的寄放器数目有限,不可能定义任性几个寄放器变量;
  3. 有个别静态变量不能够定义为贮存器变量。

      外界变量(即全局变量卡塔尔国是在函数的表面定义的,它的功用域为从变量定义处最初,到本程序文件的最终。假设外界变量不在文件的开头定义,其立见成效的魔法范围只限于定义处到文件终了。假若在定义点早前的函数想引用该外界变量,则应当在援用在此之前用关键字extern对该变量作“外界变量证明”。表示该变量是贰个风姿罗曼蒂克度定义的外界变量。有了此评释,就能够从“注脚”处起,合法地行使该外界变量。

  数据类型

按被定义变量的天性,表示情势,攻克存款和储蓄空间的有个别,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

9159.com 1

  对于大旨数据类型量,按其取值是或不是可转移又分为常量和变量二种。在程序施行进度中,其值不发生变动的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。举个例子,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是能够不经表明而直白援用的,而变量则必得先定义后使用。整型量包罗整型常量、整型变量。

常量

在程序试行进程中,其值不发出校正的量称为常量。

直白常量(字面常量):

整型常量:12、0、-3;

实型常量:4.6、-1.23;

字符常量:‘a’、‘b’。

标志符:用来标志变量名、符号常量名、函数名、数组名、类型名、文件名的得力字符系列。

标记常量:用标示符代表一个常量。在C语言中,能够用一个标记符来代表一个常量,称之为符号常量。

标识常量在选用以前必需先定义,其相通方式为:#define 标识符 常量

 

其中#define也是一条预管理命令(预管理命令都是"#"起先卡塔 尔(阿拉伯语:قطر‎,称为宏定义命令(在前面预管理程序中校进一层介绍卡塔 尔(阿拉伯语:قطر‎,其功用是把该标志符定义为之后的常量值。生龙活虎经定义,以往在程序中享有现身该标志符的地点均代之以该常量值。

习感觉常上符号常量的标志符用大写字母,变量标记符用小写字母,以示差异。使用标识常量的补益是:含义清楚;能变成“一改全改”。

变量

二个变量应该有二个名字,在内部存款和储蓄器中据为己有一定的存款和储蓄单元。变量定义必得放在变量使用从前。经常放在函数体的起首部分。要分别变量名和变量值是四个例外的定义。

     

9159.com 2

 

整型数据

整型常量

即使整常数。在C语言中,使用的整常数有八进制、十二进制和十进制二种。

十进制整常数:十进制整常数未有前缀。其数据为0~9。

八进制整常数:八进制整常数必需以0最早,即以0作为八进制数的前缀。数码取值为0~7。八进制数平时是无符号数。

十二进制整常数:十一进制整常数的前缀为0X或0x。其数量取值为0~9,A~F或a~f。

整型常数的后缀:在14个人字长的机械上,基本整型的尺寸也为十三个人,由此表示的数的界定也会有节制的。十进制无符号整常数的限量为0~65535,有标记数为-32768~+32767。八进制无符号数的意味范围为0~0177777。十五进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。假诺应用的数当先了上述范围,就必须用长整型数来代表。长整型数是用后缀“L”或“l”来表示的。

 

整型变量

整型数据在内部存款和储蓄器中的寄存方式

比方定义了一个整型变量i:

int i;

i=10;

i  10

9159.com 3

数值是以补码表示的:

正数的补码和原码近似;

负数的补码:将该数的相对值的二进制情势按位取反再加1。

右侧的第壹个人是表示符号的。

整型变量的分类

基本型:类型表达符为int,在内部存款和储蓄器中占2个字节。

短整量:类型表明符为short int或short。所占字节和取值范围均与基本型相符。

长整型:类型表达符为long int或long,在内部存储器中占4个字节。

无符号型:类型表达符为unsigned。

无符号型又可与上述三种类型匹配而结缘:

无符号基本型:类型表明符为unsigned int或unsigned。

无符号短整型:类型表明符为unsigned short。

无符号长整型:类型表达符为unsigned long。

种种无符号类型量所占的内部存款和储蓄器空间字节数与相应的有标记类型量相仿。但由于节省了符号位,故不能够代表负数。

 

 

品种表明                    符数的约束                            字节数

int-32768~32767                          即-215~(215-1) 2

unsigned int0~65535                    即0~(216-1)     2

short int-32768~32767                  即-215~(215-1) 2

unsigned short int0~65535            即0~(216-1)     2

long int-2147483648~2147483647 即-231~(231-1) 4

unsigned long0~4294967295          即0~(232-1)     4

 

 

实型常量

也称为浮点型。实型常量也称为实数也许浮点数。在C语言中,实数只使用十进制。它有两种格局:十进制小数形式,指数方式。

十进制数情势:由数码0~ 9和小数点组成。注意,必需有小数点。

指数情势:由十进制数,加阶码标记“e”或“E”以至阶码(只好为整数,能够带符号卡塔 尔(英语:State of Qatar)组成。其貌似方式为:a E n(a为十进制数,n为十进制整数卡塔 尔(阿拉伯语:قطر‎其值为 a*10n

规范C允许浮点数使用后缀。后缀为“f”或“F”即意味着该数为浮点数。如356f和356.是等价的

实型数据在内部存款和储蓄器中的存放情势

实型数据貌似占4个字节(叁十二位卡塔 尔(阿拉伯语:قطر‎内存空间。按指数方式积攒。实数3.14159在内部存款和储蓄器中的寄存情势如下:

+ .314159 1

        数符          小数部分                  指数

小数部分占的位(bit卡塔尔国数越来越多,数的实惠数字越多,精度愈高。

指数部分占的位数更加多,则能代表的数值范围愈大。

 

实型变量的分类

实型变量分为:单精度(float型卡塔 尔(阿拉伯语:قطر‎、双精度(double型卡塔 尔(英语:State of Qatar)和长双精度(long double型卡塔 尔(英语:State of Qatar)三类。

 

在Turbo C中单精度型占4个字节(三十二个人卡塔 尔(阿拉伯语:قطر‎内部存款和储蓄器空间,其数值范围为3.4E-38~3.4E+38,只好提供七个人有效数字。双精度型占8 个字节(陆15人卡塔 尔(英语:State of Qatar)内部存款和储蓄器空间,其数值范围为1.7E-308~1.7E+308,可提供14人有效数字。

类型说明符 比特数(字节数) 有效数字 数的范围
float 32(4) 6~7 10-37~1038
double 64(8) 15~16 10-307~10308
long double 128(16) 18~19 10-4931~104932

实型数据的舍入误差

出于实型变量是由少数的存款和储蓄单元组成的,由此能提供的灵光数字三番两回有限的。

a 是单精度浮点型,有效位数唯有七个人。而整数已占五个人,故小数二个人后从此现在均为无效数字。

b 是双精度型,有效位为十五个人。但Turbo C 规定小数后最多保留六个人,其他部分四舍五入。

PS:实型常数不分单、双精度,都按双精度double型管理。

 

字符型数据

包涵字符常量和字符变量。

字符常量是用单引号括起来的一个字符。比方:'a'、'b'、'='、'+'、'?'都以法定字符常量。

字符常量只好用单引号括起来,不能够用双引号或任何括号。

字符常量只好是单个字符,不可能是字符串。

字符能够是字符集中率性字符。但数字被定义为字符型之后就不可能参加数值运算。如'5'和5 是例外的。'5'是字符常量,不可能参加运算。

 

转义字符是生龙活虎种特有的字符常量。转义字符以反斜线""起始,后跟三个或多少个字符。转义字符具备特定的含义,分化于字符原有的意义,故称“转义”字符。举例,在前面各例题printf函数的格式串中用到的“n”便是三个转义字符,其意义是“回车换行”。转义字符首要用来表示那一个用平常字符不便于代表的调整代码。

 

转义字符 转义字符的意义 ASCII代码
n 回车换行 10
t 横向跳到下一制表位置 9
b 退格 8
r 回车 13
f 走纸换页 12
\ 反斜线符"" 92
' 单引号符 39
    ” 双引号符 34
a 鸣铃 7
ddd 1~3位八进制数所代表的字符  
xhh 1~2位十六进制数所代表的字符  

广义地讲,C语言字符集中的其余一个字符均可用转义字符来代表。表中的ddd和xhh正是为此而提议的。ddd和hh分别为八进制和十五进制的ASCII代码。如101意味着字母"A" ,102表示字母"B",134代表反斜线,XOA表示换行等。

字符变量用来存款和储蓄字符常量,即单个字符。字符变量的类型表达符是char。字符变量类型定义的格式和书写准绳都与整型变量相像。举例:char a,b;

种种字符变量被分配三个字节的内部存款和储蓄器空间,因而只能寄放贰个字符。字符值是以ASCII码的花样存放在变量的内部存款和储蓄器单元之中的。

例如:

a='x';

b='y';

骨子里是在a,b八个单元内部存储器放120和121的二进制代码:

a:

0 1 1 1 1 0 0 0

 

b:

0 1 1 1 1 0 0 1

 

进而也足以把它们当作是整型量。C语言允许对整型变量赋以字符值,也同意对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也同意把整型量按字符量输出。

整型量为二字节量,字符量为单字节量,当整型量按字符型量管理时,独有低七人字节到场拍卖。

 

字符串常量

字符串常量是由风流倜傥对双引号括起的字符系列。

字符串常量和字符常量是见仁见智的量。它们之间首要有以下分别:

字符常量由单引号括起来,字符串常量由双引号括起来。

字符常量只可以是单个字符,字符串常量则能够含叁个或多个字符。

能够把叁个字符常量付与三个字符变量,但无法把二个字符串常量给予叁个字符变量。在C语言中从不相应的字符串变量。那是与BASIC 语言分化的。不过能够用三个字符数组来寄存在多少个字符串常量。在数组意气风发章内授予介绍。

字符常量占贰个字节的内部存款和储蓄器空间。字符串常量占的内部存款和储蓄器字节数等于字符串中字节数加1。扩充的三个字节中寄存字符"" (ASCII码为0)。那是字符串甘休的标识。

字符串 "C program" 在内部存款和储蓄器中所占的字节为:

C   p r o g r a m
----------------------------------------------------------------------------------------

 

 

c语言基本数据类型short、int、long、char、float、double

  C 语言包涵的数据类型如下图所示:

生龙活虎、数据类型与“模子”  short、int、long、char、float、double 那三个主要字表示C 语言里的七种基本数据类型。   怎么去精晓它们啊? 举个例证:见过藕煤球的非常东西吗?(没见过?煤球总见过呢)。那几个东西叫藕煤器,拿着它在和好的煤堆里这么黄金时代咔,三个煤球出来了。半径12cm,拾一个孔。分化型号的藕煤器咔出来的煤球大小不相通,孔数也不相同样。那些藕煤器其实便是个模型。   今后大家联想一下,short、int、long、char、float、double 这两个东东是还是不是很像不一致品类的藕煤器啊?拿着它们在内部存款和储蓄器上咔咔咔,不相同尺寸的内部存款和储蓄器就分配好了,当然别忘了给它们取个好听的名字。   在32 位的系统上short 咔出来的内部存款和储蓄器大小是2 个byte;  int 咔出来的内部存款和储蓄器大小是4 个byte;  long 咔出来的内部存款和储蓄器大小是4 个byte;  float 咔出来的内部存款和储蓄器大小是4 个byte;  double 咔出来的内部存款和储蓄器大小是8 个byte;  char 咔出来的内存大小是1 个byte。  (注意这里指经常境况,大概两样的平台还有也许会迥然不一样,具体平台能够用sizeof 关键字测量试验一下卡塔 尔(英语:State of Qatar)   相当轻巧吗?咔咔咔很爽吧?是很简短,也确确实实很爽,但难点正是您咔出来这么多内部存款和储蓄器块,你总无法给她取名字叫做x1,x2,x3,x4,x5…依然尼罗河1 号,多瑙河2 号…吧。它们长得那样像(不是你家的不行,老二,老三…),过会儿你就能够忘了终归哪个名字和哪位内部存款和储蓄器块相配了(到底哪个人嫁给何人了啊?^_^)。所以呢,给他们取二个好的名字相对主要。下边大家就来切磋研商取什么样的名字好。   二、变量的命名准则 1、命名应当直观且能够拼读,可望文知意,便于回忆和读书。  标志符最佳使用菲律宾语单词或其构成,不允许行使拼音。程序中的英语单词经常不要太复杂,用词应当标准。   2、命名的长度应当切合“min-length && max-information”原则。  C 是意气风发种简单的语言, 命名也应当是精短的。比方变量名马克斯Val 就比马克斯ValueUntilOverflow 好用。标记符的长度平时不要过长,较长的单词可经过去掉“元音”变成缩写。   此外,英文词尽量不缩写,非常是万分用专门的工作名词,借使有缩写,在平等系统中对相符单词必需接收同风流倜傥的表示法,並且注脚其意思。   3、当标志符由四个词组成时,每一种词的率先个假名大写,别的全数大写。譬喻:     int CurrentVal;  那样的名字看起来相比清晰,远比一长串字符好得多。   4、尽量防止名字中现身数字编号,如Value1,Value2 等,除非逻辑上真正要求编号。比方驱动开垦时为管脚命名,非编号名字反而不佳。  初学者总是喜欢用带编号的变量名或函数名,那样子看上去很简单方便,但实际是风流洒脱颗颗依期炸弹。那一个习于旧贯初读书人必定要订正来。   5、对在八个公文之间联合采用的全局变量或函数要加范围约束符(建议选用模块名(缩写)作为限定限制符)。  (GUI_ ,etc)标记符的命名准则:   6、标记符名分为两部分:标准标记符前缀(后缀) + 含义标志。非全局变量能够毫不接受范围约束符前缀。

7、成效域前缀命名法则。

8、数据类型前缀命名法则。

 

 

9、含义标志命名准绳,变量命名使用名词性词组,函数命名使用动词性词组。举个例子:

变量含义标志符构成:目的词+ 动词(的过去分词)+ [状语] + [目的地];

函数含义标记符构成:动词(日常现时)+指标词+[状语]+[目的地];   10、程序中不得现身仅靠大小写区分的相同的标记符。举例:     int x, X; 变量x 与X 轻易混淆     void foo(int x); 函数foo 与FOO 轻易混淆     void FOO(float x);  这里还会有四个要特别注意的便是1(数字1卡塔 尔(阿拉伯语:قطر‎和l(小写字母l卡塔 尔(英语:State of Qatar)之间,0(数字0卡塔 尔(英语:State of Qatar)和o(小写字母o卡塔尔之间的差异。这两对真是很难区分的,我大器晚成度的二个同事就被那么些标题折腾了贰遍。   11、二个函数名禁绝被用来此外之处。比如:  #include "c_standards.h"  void foo(int p_1)  {     int x = p_1;  }  void static_p(void)  {     int foo = 1u;  }   12、全数宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。比方:  const int MAX_LENGTH = 100; //那不是常量,而是一个只读变量,具体请未来看     #define FILE_PATH “/usr/tmp”   13、考虑到习贯性难点,局地变量中可使用通用的命有名的模特式,只限于n、i、j 等作为循环变量使用。  一定不要写出如下那样的代码:     int p;     char i;     int c;     char * a;  平时的话习于旧贯上用n,m,i,j,k 等象征int 类型的变量;c,ch 等代表字符类型变量;a 等代表数组;p 等表示指针。当然那仅仅是肖似习于旧贯,除了i,j,k 等得以用来表示循环变量外,别的字符变量名尽量不要使用。   14、定义变量的还要千万千万别忘了伊始化。定义变量时编写翻译器并不一定清空了那块内部存款和储蓄器,它的值可能是无用的多少。这么些标题在内部存款和储蓄器管理那章有非常详尽的讨论,请参谋。   15、分歧种类数据里面包车型客车演算要小心精度扩张难题,一般低精度数据将向高精度数据扩充<br />本文来源【C语言汉语网】:<a " target="_blank">;


本文由9159.com发布于编程,转载请注明出处:C源程序的结构特点,C语言数据类型

关键词: