——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
首先,认识一个新的xCode快捷键吧:shift+cmd+k清楚缓存
我们认识了C语言后,就该熟悉它了,当然要从最基本的开始,就像我上节说的,可以把C语言当做一门类似英语的语种来学习,那么知道了C语言组成的单词,今天就来讲讲它是用什么连贯成句的。
1.表达式
算数、关系、逻辑
表达式一定有返回值
表达式后面加上分号,构成表达式语句
2.运算符
按参与运算的操作数个数分为单目、双目、三目
功能划分:算数、关系、逻辑、按位运算符
类型运算:
int a=10,b=3,result=0;
float f1 = 3.0f;
result = a+b;
printf("%f\n",a/f1);//同float型的运算后结果也是float类型的
result = a/f1;
printf("result = %d\n",result);//result是整数,如果给他一个小数,那么此时只能保存小数的整数部分
return 0;
注意:%求余运算符前后都只能是整数
类型转换
隐式类型转换(自动转换)、显式转换(强制转换)
float + int —自动转换为float + float = float
(int)float+int = int—强制转换
一个大数加一个很小的数
//大数+小数,如果使用单精度会有问题
int num=3455;
float f2=0.03;
printf("%d",(int)f2);//只在printf()函数里强制转换,对原数据无影响
printf("%f",num+f2);
(1)赋值运算符:=
等号的左侧必须是一个变量
a+b=3;//是错得
(2)复合赋值运算符
+= -= *= /= %=
a+=b+3;//按优先级先算b+3然后a=a+(b+3);
(3)自增、自减运算
只能作用在变量上,不能用在常量上!
++(a+b);//错,()内是个表达式,表达式一定有返回值,变成常量了。
a++、a—-后缀表达式先取a得值作为本表达式的值,再对a进行自增、自减运算
++a、—-a前缀表达式先取得a自增、自减运算后的值,再赋给表达式的值
(4)sizeof(常量/变量/结构体名称)运算符
不是函数,而是一个操作符
以字节的形式给出了其操作数占用的存储空间的大小
double a;
char ch = ‘a’;
int size=sizeof(1);//4
size=sizeof(a);//8
size=sizeof(int);//4sizeof用于计算某一种数据类型在内存中占用字节数
size=sizeof(2.3f);//4
size=sizeof(2.3);//8(默认是double型)
size=sizeof(‘a’);//4(把字符串的asc码转换为二进制存入内存中,也就是把a当做数字97转化成二进制存储)
size = sizeof(ch);//1字符型变量占用内存与字符常量占用内存有区别的
size = sizeof ch;//省略括号了
printf("%d\n",size);
注意:sizeof用在常量和变量的时候,是可以省略括号的
(5)逗号运算符
把n个表达式连接起来组成一个逗号表达式
求值过程:
分别求n个表达式的值
取最后一个逗号后面表达式的值
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 1,b = 7, result = 0;
result = (a+4,b+3,a+b);
printf("%d\n",result);//取最后个逗号后面表达式的值
result = ((a+4,b+3),a+b);
printf("%d\n",result);
result = (a+4,(b+3,a+b));
printf("%d\n",result);
return 0;
}
注意:
1.可以由括号嵌套使用,还是取最后一个表达式的值
2.并不是所有出现逗号的地方都能组成逗号表达式,比如定义多个变量的时候
(6)关系运算符左向右结合
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 1,b = 2,result = -1;
result = a == b;//0
result = a > b;//0
result = a < b;//1
result = a >= b;//0
result = a <= b;//1
result = a != b;//1
printf("%d\n",result);
return 0;
}
表达式结果是真=1;是假=0。
(7)逻辑运算符
&& || 左结合
!右结合
逻辑运算符短路问题:
&& 口诀:一假为假
A && B
如果A为假,B就不执行了,这就是逻辑与的短路
|| 口诀:一真为真
A || B
如果A为真,B就不执行了,这就是逻辑或的短路
int x=0,y=0,z=0;
int result = ++x || ++y && z++;
printf("result = %d,x = %d,y = %d,z = %d\n",result,x,y,z);
x=0,y=0,z=0;
result = x++ ? y++ : z++;
printf("result = %d,x = %d,y = %d,z = %d\n",result,x,y,z);
return 0;
(8)唯一的三目运算符
表达式1?表达式2:表达式3
表达式1为真执行表达式2的结果,为假执行表达式3的结果
#include <stdio.h>
int main() {
int max,b,c;
scanf("%d%d%d",&max,&b,&c);
max=max>b?max:b;//先比较两个数,大的那个取出
max=max>c?max:c;//拿比较出的大值与第三个数比较,再取出大的那个
printf("%d\n",max);//求最大值
return 0;
}
优先级和结合性
只有优先级相同的情况下,才谈结合性