日落有个小商店,贩卖着橘黄色的温柔。
7.关系操作符
>
>=
<
<=
!= (用于测试“不相等”)
== (用于测试“相等”,但是不是所有的对象都可以用该符号来比较相不相等)
eg.
int main ( )
{
if ("abc"=="abcdef") //这样写是在比较2个字符串的首字符地址
{
}
return 0;
}
//两个字符串比较相等应该使用strcmp函数来比较
(注意:在编程过程中要注意==和=不小心写错导致的错误)
8.逻辑操作符
&& 逻辑与
| | 逻辑或
区分逻辑与和按位与,区分逻辑或和按位或
(逻辑与和逻辑或只关注真假,不关注变量的二进制序列)
逻辑与(&&):同真为真,一假则假
逻辑或(| | ):同假为假,一真为真
练习:
1.下面代码打印的结果是什么?
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a=%d\n b=%d\n c=%d\n d=%d\n", a, b, c, d);
return 0;
}
分析:
2.下面代码打印的结果是什么?
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
return 0;
}
分析:
总结:
&& 左边为假,右边就不计算了
| | 左边为真,右边就不计算了
9.条件操作符 (也称为三目操作符)
(exp1) ? (exp2) : (exp3)--> (表达式1) (表达式2) :( 表达式3)
计算方式:
表达式1为真,计算表达式2,不计算表达式3-->整个表达式结果为表达式2的结果
表达式1为假,不计算表达式2,计算表达式3-->整个表达式结果为表达式3的结果
练习:
1.
if (a > 5)
b = 3;
else
b =-3;
转换成条件表达式,是什么样的?
2.使用条件操作符实现找到两个数中的较大值
#include <stdio.h>
//使用条件操作符实现找到两个数中的较大值
int main()
{
int a = 3;
int b = 0;
int max = (a > b ? a : b);
printf("%d\n", max);
return 0;
}
10.逗号表达式
exp1, exp2, exp3, ...expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左往右依次执行。整个表达式的结果是最后一个表达式的结果。
11.下标引用、函数调用和结构成员
1)[ ] 下标引用操作符
操作数:一个数组名+一个索引值
下图数组表达一般使用arr[7]这种常规表达,在初始化数组的时候写成int [10]arr 是错误的。
2)()函数调用操作符
接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传给函数的参数
3)访问一个结构体的成员
. 结构体.成员名
-> 结构体指针->成员名 ( ps->age 等价于 (*ps).age )
#include <stdio.h>
#include <string.h>//strcpy的头文件
struct Stu
{
char name[20];
int age;
double score;
};
void set_stu(struct Stu* ps)
{
//name是个地址,应该将字符串放到name所指的空间里去
//用strcpy把字符串拷贝到name所指的空间里去
//strcpy((*ps).name, "zhangsan");
//(*ps).age = 20;
//(*ps).score = 100.0;
//简化
strcpy(ps->name, "zhangsan");
ps->age = 20;
ps->score = 100.0;
}
void print_stu(struct Stu ss)
{
printf("%s %d %lf\n", ss.name, ss.age, ss.score);
}
int main()
{
struct Stu s = { 0 };
set_stu(&s);
print_stu(s);
return 0;
}