您的位置:首页 > 编程语言 > C语言/C++

C语言学习入们到精通之学习笔记(四)

2016-06-03 19:57 399 查看

C语言中的类型转换

在表达式中常遇到类型的转换,包含自动类型转换与强制类型转换,在C语言开发过程中,很多的开发人员往往会忽略数据类型的自动转换(即隐藏的),造成表达式在逻辑并看不出什么错误,而表达式的结果确怎么弄都不对,不仅耽误项目开发进度而且编写的代码bug太多,所以在我们的开发过程中一定要数据类型的自动转换加以注意。

一、自动转换规则

在表达式中,以高级别为准来自动转换
char
short
int
long
flaot
double
注:从左到右数据类型级别依次增高


例子:
'c'+12;//计算结果的数据类型是int, 'c'先变成int再和12相加
23f+12;//flaot类型先自动转换为double,然后参与运算,12是整型转换为double参与运算
'a'+'b';//char类型先自动转换为int类型,然后参与运算
'c'+32+(4e+1);//最终的结果是double类型
int a=3.2;//最终a的值为3,自动转换,舍去小数部分(double类型自动转换为int类型)
double b=3;//最终b的值为3.0,自动转换


总结:

当类型转换出现在表达式中,有符号和无符号的char和short类型都会自动被转换为int(如果 short与int大小相同时(看平台),那么unsigned short 比 int大,在那种情况下将把unsigned short转换为unsigned int),float类型会被自动转换为double

在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别

在赋值语句里,计算的最后结果被转换成将赋予值得那个变量的类型,这个过程可能导致提升也可能导致降级

二、强制转换

格式: (类型)值


例子:
3/2;//值是1,整数除整数值是整数
(double)3/2;//值是1.5,先将3转换为3.0,然后2也自动转换为2.0(强制转化优先级高)


总结:

强转 转的是类型所代表的长度、数据的格式,强转的结果存在表达式的临时存储区

一块内存空间可以存任意数据类型的数据,只要当前的内存使用什么数据类型表示

例如:int a=123;double(a); 执行后a的值还是a,并没有发生改变,(double)a是一个新的内存空间,是表达式的临时存储区,存的是123.0

三、字符串与数字之间的转换

字符串,即多个字符(包含/0,是常量,字符串的本身代表字符串的内存地址,即字符串首个字符的内存地址)


字符串转数字(函数)

int atoi(const char *nptr);

long atol(const char *nptr);

double atof(const char *nptr);

参数:nptr 字符串

返回类型:int、long、double

例子:
int main(int argc,char *argv[])
{
//字符串转整型
int a=atoi(argv[1]);
}


数字转字符串

int sprintf(char *str, const char *format, …);

参数: str 指定的内存地址 将转完的字符串保存在这个内存中

format 含有格式符的字符串

%-md 整型

%-ml 长整型

%mu 无符号

%mo 八进制

%mx 十六进制

%mp 十六进制 前面有0x

%m.nf 单精度

%m.nlf 双精度

%mc 字符

%ms 字符串

m代表占多少个字符的宽度

.n代表占小数点的位数

-代表左对齐

… 用逗号分隔的值(常量、变量、表达式) 替换前面的格式

例子:
int main(int argc,cahr **argv)
{
//数字转字符串
int a=23;
char str[256];
char str1[256]="laixioa";
char str2[256]="dads";
sprintf(str,"%d",a);//将整型数据转换为字符串
sprintf(str,"xasd%%s",str1,str2);//字符串拼接
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息