c基础-标识符,关键字及数据类型转换
标识符
- C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
- C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。
关键字
- 下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。
关键字 | 说明 |
---|---|
aut | 声明自动变量 |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 声明字符型变量或函数返回值类型 |
const | 声明只读变量 |
continue | 结束当前循环,开始下一轮循环 |
default | 开关语句中的"其它"分支 |
do | 循环语句的循环体 |
double | 声明双精度浮点型变量或函数返回值类型 |
else | 条件语句否定分支(与 if 连用) |
enum | 声明枚举类型 |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
float | 声明浮点型变量或函数返回值类型 |
for | 一种循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数返回值类型 |
register | 声明寄存器变量 |
return | 子程序返回语句(可以带参数,也可不带参数) |
short | 声明短整型变量或函数 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
static | 声明静态变量 |
struct | 声明结构体类型 |
switch | 用于开关语句 |
typedef | 用以给数据类型取别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 声明函数无返回值或无参数,声明无类型指针 |
volatile | 说明变量在程序执行中可被隐含地改变 |
while | 循环语句的循环条件 |
整数类型
char -128到127
unsigned char 0到255
signed char-128到127
int 2或4字节 与系统位数有关 -32768到32767或-2147483648到2147483647
unsighed int 0到4294967295
(描述int这个问题主要是想说在mysql不存int型的手机号是因为最大就是十位,无论是有符号还是无符号数。)
short 2字节 -32768到32767
unsigned short 2字节 0到65535
long 4字节 -2147483648到2147483647
long long 8字节
不同系统位数的存储大小差别
浮点类型
float 4
double 8
long double16
void类型
函数返回为空
- 1.C中有各种函数都不返回值,或者可以说它们返回空,不返回值的函数的返回类型为空。例如,void exit(int status);
- 2.函数参数为空例如 int rand(void);c中有各种函数不接受任何参数。不带参数的函数可以接受一个void。
- 3.指针指向void 类型为void*的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc(size_tsize );返回指向void的指针,可以转换为任何数据类型。
数据类型
整数
- 1.默认都是10进制
- 2.以0开头为8进制,045,021.
- 3.以0b开头为2进制,0b111
- 4.以0x开头诶10进制,0x21adf.
小数
- 1.2.3f。
- 2.双精度常量2.3,默认为双精度
字符型常量
- 1.用英文单引号括起来,可以有字符'a',也可以有转义字符'\n'、'\t'.。
字符串常量
- 1.用英文双引号引起来,可以保存多个字符"abc"。
数据类型转换
C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;在 C 语言中也可以对数据类型进行强制转换;
自动转换规则:
a)浮点数赋给整型,该浮点数小数被舍去;
b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
3、强制类型转换形式: (类型说明符)(表达式)
自动转换的规则如下:
- 当参与运算的数据的类型不同时,编译系统会自动先将它们转换成同一类型,然后再进行运算。
但问题是转换的时候是谁转换成谁呢?转换的基本规则是“按数据长度增加的方向进行转换”,以保证精度不降低。比如 int 型数据和 long 型数据进行相加或相减运算时,系统会先将 int 型数据转换成 long 型,然后再进行运算。这样的话运算结果的精度就不会降低。
long 是“大水桶”,int 是“小水桶”。int 能存放的,long 肯定能存放;而 long 能存放的,int 不一定能存放。
- 所有的浮点运算都是以双精度进行的。
在运算时,程序中所有的 float 型数据全部都会先转换成 double 型。即使只有一个 float 型数据,也会先转换成 double 型,然后再进行运算。为什么要这样呢?因为 CPU 在运算的时候有“字节对齐”的要求,这样运算的速度是最快的。这个现在先不管,如果以后有机会学习汇编的话你就知道原因了。
-
char 型和 short 型数据参与运算时,必须先转换成 int 型。这也是涉及 CPU 的运行原理的,记住就行了。
-
有符号整型和无符号整型混合运算时,有符号型要转换成无符号型,运算的结果是无符号的。这条规则经常使人纠结,可以写一个程序看一下。
-
整型和浮点型混合运算时,整型先转换成浮点型,运算的结果是浮点型。
-
在赋值运算中,当赋值号两边的数据类型不同时,右边的类型会转换为左边的类型,然后再赋给左边。如果右边数据类型的长度比左边长,那么将会丢失数据,这样就会降低精度,所以编译的时候会产生警告。