文章目录
前言
C语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符的介绍。
一、逻辑与、或操作符
- && ---- 逻辑与操作符
- || --------逻辑或操作符
- 逻辑与、或操作符只在乎真假。1为真,0为假。
- 与按位与、或的区别就是,按位与、或是二进制位,逻辑与、或只在意数值真假。
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
int c = a && b; // a、b都为真,所以返回值 c 为 1
printf("%d\n", c); // 1
int a1 = 0;
int b1 = 0;
int c1 = a1 && b1; // a1、b1都为假,所以返回值 c1 为 0
printf("%d\n", c1); // 0
return 0;
}
- 逻辑与有一个假则为假,都是真才为真。
- 逻辑或有一个真则为真,都是假才为假。
#include <stdio.h>
int main()
{
int a = 5;
int a1 = 0;
int b = 3;
int b1 = 0;
int c = a && b; // a、b都为真,则 c 为真,c = 1
int c1 = a && b1; // a为真,b1为假, 则 c1 为 假, c = 0
int c2 = a1 && b; // a1 为假, b为真, 则 c2 为假, c = 0
int d = a1 || b1; // a1、b1都为假,则 d 为假,c = 0
int d1 = a || b1; // a为真,b1为假, 则 d1 为 真, c = 1
int d2 = a1 || b; // a1 为假, b为真, 则 d2 为真, c = 1
printf("c=%d\n", c); // 1
printf("c1=%d\n", c1); // 0
printf("c2=%d\n", c2); // 0
printf("d=%d\n", d); // 0
printf("d1=%d\n", d1); // 1
printf("d2=%d\n", d2); // 1
return 0;
}
逻辑与,若前一个表达式为假,则不计算后一个表达式,直接为假。
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
// a++ 先参与运算再自增 所以 上式中 a++表达式值为 0
// 逻辑与操作符,前一个表达式为0, 后面不在计算,直接为假。
// 所以 a++ && ++b 值为0,且++b不参与运算
// 同理 0 && d++ 值也为0 且 d++不参与运算
printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d); // 1 2 3 4
// 若a = 1,则都参与运算结果为 2 3 3 5
return 0;
}
逻辑或,若前一个表达式为真,则不计算后一个表达式,直接为真。
#include <stdio.h>
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
// a++ 先参与运算再自增 所以 上式中 a++表达式值为 1
// 逻辑或操作符,前一个表达式为1, 后面不在计算,直接为真。
// 所以 a++ || ++b 值为1,且++b不参与运算
// 同理 1 || d++ 值也为1 且 d++不参与运算
printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d); // 2 2 3 4
// 若a = 0; 则 a++ 和 ++b 参与运算, d++不参与运算 结果为 1 3 3 4
return 0;
}
二、条件操作符
- 条件操作符又叫三目操作符。
- 格式为: 表达式1 ? 表达式2 : 表达式3
- 若表达式1为真,则执行表达式2,整个语句结果为表达式2的值。
- 若表达式1为假,则执行表达式3,整个语句结果为表达式3的值。
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
int c = a > b ? a : b; // 若 a > b 则 c = a, 否则, c = b;
printf("%d\n", c); // 5
return 0;
}
三、逗号表达式
- 逗号表达式结果为最后一个表达式的值。
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
int c = (a + b, a = a / 5, b = b - 5, b + a);
// (不影响a、b的值, a = 1, b = -2, -2 + 1 )最后一个表达式的值为-1 结果为-1
printf("%d\n", c); // -1
return 0;
}
四、下标引用操作符
- 下标引用操作符----------[]。
- 下标引用操作符一般操作的是数组。
- 下标引用操作符的操作数为 数组名,下标。
- arr[7] 也可写成 7[arr]。 但不推荐。
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
// arr[7] ---> *(arr+7) ---> *(7+arr) ----> 7[arr]
arr[7] = 5;
//
// arr 是数组首元素地址
// 7 指的是 arr + 7,即首元素地址加 7 即第 8 个元素的地址
// arr[7] = 5 本质上是 *(arr + 7) = 5, 即第 8 个元素修改为5
5[arr] = 3;
printf("%d\n", arr[7]); // 5
printf("%d\n", 5[arr]); // 3
return 0;
}
五、函数调用操作符
- 函数调用操作符-----()。
- 函数调用操作符不能省略。
- 函数调用操作符的操作数为 函数名,参数。
- 函数调用操作符的操作数至少为 1,即函数名。
#include <stdio.h>
// 函数定义
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 5;
int b = 3;
// 函数调用
int c = Add(a, b); // 函数调用操作符()不能省略, 此时操作数为3
printf("%d", c); // 8
return 0;
}
六、结构体调用操作符
- “·” 结构体.成员名
- “->” 结构体指针->成员名
#include <stdio.h>
#include <string.h>
// 创建结构体类型
struct stu
{
char name[20];
int age;
double score;
};
void set_stu(struct stu* ps)
{
/*strcpy((*ps).name, "zhangsan");
(*ps).age = 20; // 结构体对象.成员
(*ps).score = 100.00;*/
strcpy(ps->name, "zhangsan");
ps->age = 20; // 结构体指针->成员
ps->score = 100.00;
}
void print_stu(struct stu ss)
{
printf("%s %d %lf", ss.name, ss.age, ss.score); // zhangsan 20 100.000000
}
int main()
{
struct stu s = { 0 };
set_stu(&s);
print_stu(s);
return 0;
}
总结
C语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符的介绍。