类型转换:
       语句或表达式通常应该只使用一种类型的变量或常量。
类型转换规则:1.当出现在表达式里时,有符号或无符号的char和short 类型将自动的转换为int 类型,在需要的情况下,将自动的转换成unsigned int类型。Float将自动转换成double 。因为是转换成较大的类型,所以这些类型被称为提升。2.在包含两种数据的任何运算里,两个值都将转换成两种类型里较高的级别。3类型级别从高到底,long double ,dougle ,float ,unsigned long long ,long long ,unsigned long ,long ,unsigned int ,int 在这个当中没有出现char ,short 类型是由于它们在运算中以自动转换成int 或者unsigned int。4.在赋值语句中,计算的最后结果被转换成将要被赋值变量的类型。降级是指将数据类型转换成一个更低级别的类型。5.当作为函数的参数传递时char ,short转换成int,float 转换成double,可以通过函数原型来阻止数据类型的自动转换。
 
// 5-14.c ---类型的自动转换
#include <stdio.h>
int main (void)
{
       char ch;
       int i;
       float fl;
 
       fl = i = ch = 'A';
       printf ("ch = %c ,i =%d ,fl = %2.2f,\n",ch,i,fl);
       ch = ch + 1;
       i = fl + 2 * ch;
       fl = 2.0 + ch * i;
       printf ("ch = %c, i = %d ,fl = %2.2f\n",ch,i,fl);
       ch = 512205.17;
       printf ("Now ch = %c\n",ch);
       return 0 ;
}
 
指派运算符:
       系统提供了自动转换数据类型,但是有时候需要准确的类型转换或者需要在程序中表明您知道在做类型转换,要完成这一任务的方法我们称为指派。这样我们就要用到指派运算符,什么是指派运算符?它就是在某个量前加一圆括号,圆括号里加被希望转换的类型好如:((int )a)就是希望a转换成int类型。
到目前为止我们学习的运算符如下:

赋值运算符
 
=
将右边的值赋给左边的变量
算术运算符
 
+
将它右边的值和左边的值相加
-
从它的左边值里减掉它右边的值
-
作为一元运算符,改变它右边值的符号
*
用它左边的值乘以它右边的值
/
用它左边的值除以它右边的值,如果两个操作都是整数那么结果被截尾
%
用它左边的值除以它右边的值时所得的余数(只对整数)
++
对它的右边值加1(前缀模式)或者它左边的值加1(后缀模式)
--
与++类似,只不过他是减1
其他运算符
 
sizeof
给出他右边操作数的字节大小,操作数可是圆括号里的一个类型说明符
(type)
作为指派运算符,它将跟在它后面的值转换成圆括号里的关键字指定的类型

 
 
带有参数的函数:
       // 5-15.c --定义一个带有参数的函数
#include <stdio.h>
void pounde (int a);     //ANSI风格的原型
int main (void)
{
       int times = 5;
       char ch = 'i';     
       float f = 6.0;
       pounde (times);      //int 参数
       pounde (ch);                 //char 参数自动转换成int 类型
       pounde ((int) f);    //指派运算符把f强制转换成int类型
       return 0 ;
 
}
 
void pounde (int a)      //ANSI风格的函数头
{
       while (a-- > 0)
              printf ("#");
       printf ("\n");
 
}
如果函数不接受参数,要在函数后的圆括号里加入关键字viod ,因此此函数接受一个int 类型参数。所以圆括号里包含一个名字为a的int类型变量的声明。声明一个参数 就创建一个称为形式参数的变量。在止例中函数调用pounde (times )把times的值(5)赋给了a,我们称函数调用传递一个值,这个值叫实际参数
函数中的变量名字是局部的:也就是说在本函数外还可以有与在函数里相同的变量名字。
原型是一个函数声明,它描述了函数的返回值和它的参数。在止例中 原型说明了pounde函数的两件事:函数没有返回值和函数接受一个int类型的参数。因为编译器在main ()使用pounde ()之前看到这个原型所以编译器知道pounde ()应该有什么类型的参数。并且需要使实际参数的类型和原型的类型保持一致时,编译器会插入一个类型指派符。