【C】C语⾔基础(包括:关键字、数据类型、输⼊输出)程序中的变与不变——变量与常量
标识符和关键字
标识符:⽤来标识程序中⽤到的变量名、函数名、类型名、数组名、⽂件名以及符号常量名的有效字符序列。
语法规则(部分):
标识符只能是由英⽂字母、数字和下划线组成的字符串,并且第⼀个字符必须为字母或下划线;
网页float是什么意思标准C语⾔不限制标识符的长度,但是受到各个版本的C语⾔编译系统的限制。⼤多数情况下,标识符的前8位有效,也就是说,如果两个标识符的前8位相同,系统将会认为是同⼀个标识符。
关键字:C语⾔规定的具有特殊意义的字符串,通常也称为保留字(37个)。通常分为:数据类型关键字、语句控制关键字、存储类型关键字、其他关键字。
下⾯列出了C语⾔的所有关键字:
数据类型关键字
char double enum float
int long short signed
struct union unsigned void
语句控制关键字
for do while break continue if else goto
swith case default return
存储类型关键字
auto extern register static
其他关键字
const sizeof typedof volatile
inline restrict_bool_complex _imaginary
常量和变量
在程序执⾏过程中,其值不发⽣改变的值称为常量,其值可变的称为变量。在程序中,变量通常是可以不经说明⽽直接引⽤的,⽽变量则必须先定义后使⽤。
常量可以分为:数值常量、字符常量、字符串常量和符号常量等。
数值常量:数值常量通常表⽰的是数字。
int a=1;
在这句程序中的1,在程序运⾏过程中是始终不变的,是常量。
字符常量:字符常量通常是指单引号⾥的单个字符。
int a=1;
int b='1';
在这个程序段中,1和'1'的含义是不⼀样的,⼀个是数值,可运算;⼀个是字符,仅仅是⼀个符号⽽已。
字符串常量:字符串常量通常是指双引号⾥的字符串。
这⾥需要注意⼀种特殊情况,⽐如“\n”、“\a”,像这种字符常量就是通常所说的转义字符。这种字符以反斜杠(\)开头,后⾯跟⼀个字符或者⼀个⼋进制或者⼗六进制数,表⽰的不是双引号⾥⾯的值,⽽是“转义”。
下⾯列出了C语⾔的所有转义字符:
常见转义字符
字符形式含义字符形式含义
\x20空字符\f换页符
\n换⾏符\'单引号
\r回车符\"双引号
\t⽔平制表符\\反斜杠
\v垂直制表符\?问号字符
\a响铃\ddd任意字符
\b退格符\xhh任意字符符号常量:符号常量是使⽤⼀个标识符来表⽰⼀个常量。但是,符号常量在使⽤前必须要先定义,定义形式为:
#define 标识符常量
其中,#define是⼀条预处理命令,称为宏定义命令。在编译之前,系统会⾃动把所有的标识符都替换成常量。
变量按其作⽤域分,可分为局部变量和全局变量,具体的解释为:
全局变量(外部变量):在所有源⽂件内均有效。在同源⽂件的函数中使⽤使⽤全局变量,需要将全局变量提前声明;同时在不包含全局变量定义的不同源⽂件需要⽤extern关键字再次声明。
静态全局变量:只在定义它的源⽂件内有效;
静态局部变量:只在定义它的函数内有效。只是程序仅分配⼀次内存,函数返回后,该变量不会消失,只有程序结束后才会释放内存;
局部变量(内部变量):在定义它的函数内有效,但是函数返回后失效。
关于C语⾔变量,还有⼏个注意点:
由于C语⾔规定函数的返回值只能有⼀个,当需要增加函数的返回数据的时候,使⽤外部变量是⼀种很好的⽅式。因此,外部变量是实现函数之间数据通信的有效⼿段。
变量的定义是给变量分配内存空间,在分配好内存空间后,程序没有运⾏前,会给变量分配⼀个不可知的混乱值,如果程序中没有对其进⾏赋值就使⽤的话,势必会引起不可预期的结果。所以,变量在使⽤前必须进⾏初始化。
关于C语⾔变量的详细讲解,可参考链接。
数据的种类——数据类型
所谓数据类型就是按被说明量的性质、表现形式、占据存储空间的⼤⼩、构造特点来划分的。在C语⾔中,数据类型可分成基本数据类型、构造数据类型、指针数据类型、空类型四⼤类。本⽂主要介绍基本数据类型。
数制
⼆进制:⼆进制是逢⼆进⼀的数制,⽬前的计算机全部是采⽤⼆进制系统;
⼋进制:⼋进制是逢⼋进⼀的数制,⼋进制数必须以0开头,即以0作为⼋进制的前缀。⼋进制数通常是⽆符号数;
⼗六进制:⼗六进制就是逢⼗六进⼀的数制,⼗六进制数必须以0x开头。
数制间的转换:标准输出函数printf()可以⽤于函数输出转换。
printf()函数的格式控制参数
格式控制参数描述
%d⼗进制有符号整数
%u⼗进制⽆符号整数
%f⼗进制浮点数
%o⼋进制数
%x⼗六进制数
例如,将unsigned int类型的数12进⾏⼗进制、⼋进制、⼗六进制的输出:
unsigned int x=12;
printf("⼗进制%u 转换为⼋进制%o 转换为⼗六进制%x\n",x,x,x);
基本数据类型
short、int、long、char、float、double 这六个关键字代表C 语⾔⾥的六种基本数据类型。
在计算机内部的数据都是以2进制的形式存储的,每⼀个⼆进制数称为1位(bit),位是计算机中的最⼩的存储单元,⼀个8bit的⼆进制数称为⼀个字节(Byte),不同的数据类型有不同的字节要求来存储。但是,各种⽆符号类型量所占⽤的内存空间与相应的有符号类型量相同。正是由于省去了符号位,故⽆符号数不能表⽰负数,使得⽆符号数可以存放的正整数的范围⽐有符号数扩⼤了⼀倍。
在不同的系统上,这些类型占据的字节长度是不同的:
C语⾔数据类型
类型说明符⽐特数(字节数)(32位系统)⽐特数(字节数)(64位系统)
short(短整型)16(2)16(2)
int(整形)32(4)32(4)
long(长整型)32(4)64(8)
float(单精度浮点数)32(4)32(4)
double(双精度浮点数)64(8)64(8)
char8(1)8(1)
除了这些之外,还有⼀些特殊的数据类型:
C语⾔数据类型
类型说明符⽐特数(字节数)(32位系统)⽐特数(字节数)(64位系统)备注
char *32(4)64(8)其他指针类型如long *, int * 也是如此
long long64(8)64(8)
long double80(10)/96(12)80(10)/128(16)有效位10字节。32位为了对齐实际分配12字节;64位分配16字节
通过上表,可以看出,对于32位和64位机器,只有long和指针类型的长度不⼀样,其它类型所占字节数都是⼀样的(long double除外,见备注)。
解释:在MSDN上关于这⼀点有描述,On 32-bit platforms, long is synonymous with int.
即:在32位机上,long与int同义。
不同的编译器会分配不同的空间,还跟计算机是多少位的有关,不过⼀般long是int的两倍长度。long的定义是其所占⽤的存储空间⼤⼩不⼩于int。long 和int只是(可能会)存储空间⼤⼩不同,⽽读取两者中的数据时使⽤的⽅法规则是⼀样的。⽽在32位机上,两者是相同的。
整型和浮点型
整形在内存中是以⼆进制的形式存放的。如果定义了⼀个整形变量i:
int i=10;
在内存中变量i的实际存放是:00000000 00000000 00000000 00001010。
数值是按照补码的形式表⽰的:
正数的补码与源码相同;
负数的补码等于该数绝对值的⼆进制形式按位取反再加1。
浮点型在内存⼀般是按照指数形式存储的。如果定义了⼀个浮点数变量j:
float j=3.14159;
在内存中变量j的实际存放是:符号位,⼩数部分(.314159),指数部分(1)。
⼩数部分占位越多,数的有效数字越多,精度越⾼;
指数部分占位越多,数的取值范围越⼤。
字符型
字符变量在内存中如何存储:
字符是系统中字符集中的⼀系列的符号,在使⽤的时候,⽤编号进⾏读取,也就是说在字符变量⾥⾯放着这些符号的编号,这些编号就是ASCII码。ASCII码是⼀些整形的数据,这也造成了字符型变量可以在⼀定程度上可以和整形进⾏换算。因为数字1-9、字母a-z、字母A-Z 的ASCII码都是连续的,⽽且
是整形。
字符串型
字符串常量和字符常量的区别:
字符常量是单引号括起来的,字符串常量是双引号括起来的;
字符常量只能是单个字符,字符串常量可以是单个或多个字符;
可以将⼀个字符常量赋值给⼀个字符变量,但是不能讲⼀个字符串常量赋值给⼀个字符串变量的。
因为C语⾔中是没有字符串变量这个说法的!但是,可以⽤⼀个字符数组来存放⼀个字符串常量。
字符常量占⽤1个字节的内存空间,字符串常量占⽤的内存字节数等于字符串中字节数加1。
因为增加的1个字节的空间是⽤来存放字符“\0”(ASCII码为0)。这是字符串结束的标志。
数据类型的转换
隐式转换
隐式转换,⼜称为⾃动转换,应遵循以下规则:
若参与运算的类型不同,则先转换成同⼀类型,然后进⾏计算;
转换按数据长度增加的⽅向进⾏,以保证精度不降低;
所有的浮点数运算都是以双精度进⾏的,即使仅含有float单精度量运算的表达式,也要转换成double;
char和short参与运算时,必须先转换成int;
赋值运算时,赋值号左右两边的数据类型不同时,赋值号右边的类型将转换成左边的类型,即使丢失精度。
显式转换
如果隐式转换不符合要求,⾮常明确地希望转换数据类型,可以使⽤显⽰转换。其⼀般形式是:
(类型说明符) (表达式)
⽆论是隐式转换还是显⽰转换,都只是为了本次运算的需要⽽对变量的数据长度进⾏的临时性转换,⽽不改变数据说明时对该变量定义的类型。
⽤户与计算机的交互——输⼊和输出
输⼊/输出函数⼀览
函数名称描述
printf标准化输出
scanf(scanf_s)标准化输⼊
getchar字符输⼊
putchar字符输出
gets字符串输⼊
puts字符串输出
这些函数的具体描述和讲解如下:
格式化输⼊/输出
C语⾔提供了许多的常⽤函数(包括输⼊/输出函数、数学运算函数等),他们被存放在系统的函数库中。在C语⾔的标准库stdio.h⽂件中,提供了⼀些通⽤的函数(如printf()函数和scanf()函数等),这些函数被各种计算机系统所提供,因此也是标准输⼊/输出函数。
使⽤标准输⼊/输出库函数的时候需要⽤到stdio.h⽂件,因此源⽂件开头应有相应的预编译命令:
#include<stdio.h>
#include "stdio.h"
stdio是standard input&output的意思。
格式化是指按照⼀定的格式,格式化输⼊/输出是指按照⼀定的格式读取来⾃输⼊设备的数据或者向输出设备输出数据。符合格式化输⼊/输出的代表函数就是printf()函数和scanf()函数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。