- 逻辑操作符
&& 逻辑与
|| 逻辑或
逻辑与:两个值中一个为假,则判断为假
逻辑或:两个值中一个为真,则判断为真
区分逻辑与和按位与
区分逻辑或和按位或
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
- 条件操作符
exp1 ? exp2 : exp3
代码演示:
include <stdio.h>
int main()
{
int a = 10;
int b = 0;
int c = 0;
if (a > b)
b = 3;
else
b = -3;
c = (a > b ? 3 : -3);
printf("%d %d\n", b, c);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
运行结果:
分析:
exp1 ? exp2 : exp3
如果表达式1为真,那么就计算表达式2,表达式2的结果为整个式子的 结果
如果表达式1为假,那么就计算表达式3,表达式3的结果为整个式子的结果
相比于条件语句条件操作符更简洁
- 逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式
include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
printf("%d\n", c);
return 0;
}
1
2
3
4
5
6
7
8
9
运行结果:
分析:逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果
- 下标引用、函数调用和结构成员
11.1 下标引用
[ ] 下标引用操作符操作数:一个数组名 + 一个索引值
int arr[10]; 创建数组
arr[9] =10; 实用下标引用操作符
[ ]的两个操作数是arr和9。
11.2 函数调用
() 函数调用操作符
代码演示:
include <stdio.h>
void test1()
{
printf("haha\n");
}
void test2(const char* str)
{
printf("%s\n", str);
}
int main()
{
test1();
//实用()作为函数调用操作符。
test2("hello world!");
//实用()作为函数调用操作符。
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
运行结果:
分析:接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
11.3 访问一个结构的成员
访问方法:
. 结构体.成员名
-> 结构体指针->成员名
代码演示:
include <stdio.h>
//学生
struct Stu
{
//成员
char name[20];
int age;
char sex[10];
char tele[12];
};
void print(struct Stu* ps)
{
printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
//->
//结构体指针变量->成员名
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->tele);
}
int main()
{
struct Stu s = {"zhangsan", 20, "nan", "15596668862"};
//结构体对象.成员名
printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);
print(&s);
return 0;
}