• C语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符



    前言

    C语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符的介绍。


    一、逻辑与、或操作符

    • && ---- 逻辑与操作符
    • || --------逻辑或操作符
    • 逻辑与、或操作符只在乎真假。1为真,0为假。
    • 与按位与、或的区别就是,按位与、或是二进制位,逻辑与、或只在意数值真假。
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 逻辑与有一个假则为假,都是真才为真。
    • 逻辑或有一个真则为真,都是假才为假。
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    逻辑与,若前一个表达式为假,则不计算后一个表达式,直接为假。

    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    逻辑或,若前一个表达式为真,则不计算后一个表达式,直接为真。

    #include 
    
    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
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    二、条件操作符

    • 条件操作符又叫三目操作符
    • 格式为: 表达式1 ? 表达式2 : 表达式3
    • 表达式1为真,则执行表达式2,整个语句结果为表达式2的值
    • 若表达式1为假,则执行表达式3,整个语句结果为表达式3的值
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、逗号表达式

    • 逗号表达式结果为最后一个表达式的值。
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    四、下标引用操作符

    • 下标引用操作符----------[]。
    • 下标引用操作符一般操作的是数组。
    • 下标引用操作符的操作数为 数组名,下标。
    • arr[7] 也可写成 7[arr]。 但不推荐。
    #include 
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    五、函数调用操作符

    • 函数调用操作符-----()
    • 函数调用操作符不能省略
    • 函数调用操作符的操作数函数名,参数
    • 函数调用操作符的操作数至少为 1,即函数名
    #include 
    // 函数定义
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    六、结构体调用操作符

    • “·” 结构体.成员名
    • “->” 结构体指针->成员名
    #include 
    #include 
    
    // 创建结构体类型
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    总结

    C语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符的介绍。

  • 相关阅读:
    “两客一危”车辆综合监控信息化产品及应用分析
    分布式应用运行时 Dapr 1.7 发布
    基于文化算法优化的神经网络预测研究(Matlab代码实现)
    Rsudio service
    常见服务知识点罗列--nginx
    Metasploit 操作及内网 Pivot图文教程
    阿里本地生活全域日志平台 Xlog 的思考与实践
    C++继承(多继承、菱形继承?)
    [python][学习]认识元组
    解密Java多线程同步:掌握线程间同步与互斥技巧
  • 原文地址:https://blog.csdn.net/Farewell_me/article/details/137917371