目录
1、逗号运算符
逗号也是运算符?是的,但是其实我更愿意说它是分隔符。在C语言中我们就经常使用逗号,看似逗号是非常平凡的分隔符,但是它关联到一个你必须知道但可能未曾思考的小知识:
理论上,每条语句(分号结束),最终都会转换成一个值。
例子1:
#include <stdio.h>
int main()
{
3, 4, 5;//这是一条语句
//把上面这条语句的值赋值给变量a
int a = (3, 4, 5);
printf("a=%d\n", a);
}
输出结果:a=5
因为a的值是整条语句的值,而整条语句的值是最后那个逗号后面的值
例子2:
#include <stdio.h>
int main()
{
int a=3, b=4, c=5;
int x=0;
int y=(x=a+b),(b+c);
printf("第一个y=%d\n", y);
y=((x=a+b),(b+c));
printf("第二个y=%d\n", y);
}
输出结果:
第一个y=7
第一个y=9
第一个y的值你应该能看懂,就是逗号分隔开,使得y=x=a+b
第二个y其实就等于逗号后面的(b+c)的值!逗号前面那些似乎是多余的
那多余的东西为什么要写呢?请注意:逗号前面有个x的赋值语句,所以并不多余!
这样写的目的有2:
1.简化代码:两句合成一句写.
2.让你理解一个句子就会像一个函数一样有返回值,如果用逗号隔开,
这个【返回值】就会变成最后那个表达式的值!
道理:一条语句理论上是有返回值的,如果语句里面有多个逗号,则以最后一个逗号后面的表达式值为返回值!
//返回值是6,就像函数一样忽略返回值的写法:
1,2,3,4,5,6;
但是请注意区分,如上面的
y=(x=a+b),(b+c);和y=((x=a+b),(b+c));
仔细观察,你会发现:
前面是【忽略句子返回字】的,
后面是【用变量y存放返回值】的
2、三目运算符
三目运算符也叫条件运算符、三元运算符,是由一个问号和一个冒号组成。
语法:
表达式1?表达式2:表达式3;
语义:
先执行表达式1,如果表达式1的结果如果为真,那么执行表达式2,并且这个整体的运算式的结果是表达式2的结果;如果表达式1的结果如果为假,执行表达式3,运算式的结果是表达式3的结果。
int a,b,c;
a=7;
b=6;
c=(a>b)?a:b;
等同于
if (a>b) c=a;
else c=b;
三目运算符可以嵌套使用,我不建议使用三目运算符,过于复杂的三目运算难以理解。
比如判断year是不是闰年,是则返回1,不是返回0。
int year;
year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0);
3、sizeof运算符
3.1、sizeof是什么?
在 C /C++语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。其作用是取得一个对象(数据类型或者数据对象)的长度(即占用内存的大小,以byte为单位)。其中类型包含基本数据类型(不包括void)、用户自定义类型(结构体、类)、函数类型。数据对象是指用前面提到的类型定义的普通变量和指针变量(包含void指针)。
3.2、sizeof的使用
在此之前先介绍一下常见的数据类型
常见的基本数据类型char,short int,int,long,long long,float,double
用户自定义数据类型struct(结构体类型),enum(枚举类型),union(联合体类型),arr[](数组类型)
指针类型int*,char*,float*,void*(空指针)
如果初学者不知道各种类型在内存中的大小,可以使用sizeof来计算及验证以上常见的几种数据类型,具体用法如下。
以下代码的运行环境是基于VS2017 ×86环境下得到的结果
<