C语言基础知识:其他运算符及运算符的优先级

目录

1、逗号运算符

2、三目运算符

 3、sizeof运算符

3.1、sizeof是什么?

3.2、sizeof的使用

3.3、 在字符串数组中sizeof与strlen的区别

3.4、总结

4、C语言中运算符的优先级


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环境下得到的结果

<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值