三目运算符: ?:
表达式1 ? 表达式2 : 表达式3
表达式1是一个判别表达式。
如果为真。整个三目运算取值表达式2. ?XXXX
如果为假。整个三目运算取值表达式3 :XXXX
int a = 0;
int b = 1;
printf("%s\n", a > b ? "a>b": "a<b");
输出
a<b
嵌套三目运算
int a = 2;
int b = 1;
int c = a < b ? 50 : a < b ? 3 : 4; //嵌套
printf("c=%d\n", c);
输出
c=4
逗号运算符:(优先级最低)
int a=10, b=20, c=30;
int x = (a = 1, b = 2, c = 3); //逗号运算符,小括号优先级最高先做括号中的运算
//x值是整个逗号表达式中最后一个的值
printf("x=%d\n", x);
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("c=%d\n", c);
输出
x=3
a=1
b=2
c=3
隐式类型转换:
由编译器自动完成。
由赋值产生的类型转换。小---》大 没问题 大---》小 有可能发生数据丢失
int r=3;
float s= 3.14 *r* r;
int a = 321;
char ch = a;
printf("ch=%d\n",ch);
输出
ch=65
321:256 125 64 32 16 8 4 2 1
char类型(8bit)ch 0,因为最多只能存储八位,所以从右到左依次相加得65
强制类型转换:
语法:(目标类型)带转换变量
(目标类型)带转换表达式
float price = 3.6;
int weight = 4;
double sum = (int)price * weight; //将price强转整型3.6--》3
printf("价格:%lf\n", sum);
输出
sum=12
float price = 3.6;
int weight = 4;
double sum = (int)(price * weight); //算出来的值强转为整型
printf("价格:%lf\n", sum);
输出
sum=14
大多数用于函数调用期间,实参给形参传值
int *p = (int *)malloc(100);?????