当前位置:   article > 正文

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

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


前言

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 逻辑与有一个假则为假,都是真才为真。
  • 逻辑或有一个真则为真,都是假才为假。
#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;
}
  • 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 <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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

#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
  • 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 <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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

三、逗号表达式

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

四、下标引用操作符

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

五、函数调用操作符

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

六、结构体调用操作符

  • “·” 结构体.成员名
  • “->” 结构体指针->成员名
#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;
}
  • 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语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符的介绍。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/482149
推荐阅读
相关标签
  

闽ICP备14008679号