操作符:
关系操作符:
= < <= !=(用来测试不相等) ==(用来测试相等)
小tips:在编程过程中,注意==和=不小心写错。
逻辑操作符:&&:逻辑与 ||:逻辑或
小tips:注意逻辑与/逻辑或和按位与/按位或的的区别是:逻辑操作只是判断该数或者表达式本身的逻辑值是真还是假,而按位与/按位或是将该数的二进制进行位与/位或的操作。
举例如下:
#include<stdio.h> int main() { printf("%d\n", 1 & 2);//将1的二进制和2的二进制按位与 printf("%d\n", 1 | 2);//将1的二进制和2的二进制按位或 printf("%d\n", 1 && 2);//将&&左右两边的条件进行判断,同为真,即为真,一假,则为假 printf("%d\n", 1 || 2);//将||左右两边的条件进行判断,一真则为真,全假才是假 return 0; }
0 3 1 1
注意:逻辑操作符与,在使用过程中,左边的值判断为假,则右边的表达式不再进行运算,只进行左边的。
举例如下:
#include<stdio.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++;//a++结果是假,则只执行a++ printf(" a=%d\n b=%d\n c=%d\n d=%d\n",a, b, c, d); return 0; }
a=1 b=2 c=3 d=4
同样的,逻辑操作符或,在使用过程中,左边判断值为真,则右边表达式不再进行运算,只进行左边的
举例如下:
#include<stdio.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ || ++b || d++;//判断||左边a++是假,则进行++b,++b是真,不再进行d++ printf(" a=%d\n b=%d\n c=%d\n d=%d\n", a, b, c, d); return 0; }
a=1 b=3 c=3 d=4
条件操作符:exp1 ? exp2 : exp3 其含义为:如果表达式1为真,则执行表达式2,此时表达式2的结果为整个表达式最终的结果,如果表达式2为假,则执行表达式3,此时表达式3的结果为整个表达式最终的结果。
举例:
#include<stdio.h> int main() { int a = 3, b = 4,max; max=a > b ? a : b;//如果a>b,则max为a,否则为b,注意这里是冒号不是分号。 printf("%d\n", max); return 0; }
4
逗号表达式:exp1,exp2,exp3,expN,逗号表达式,就是用逗号隔开的多个表达式,逗号表达式,从左往右依次执行,整个表达式的结果是最后一个表达式的结果。
举例如下:
int a = 1,b=2,c=(a>b,a=b+10,b=a+1); printf("%d\n", c);
13
小tips:从左往后依次执行,最后一个表达式的结果即为最终结果,而不是只执行最后一个表达式。
那么逗号表达式有什么作用呢?它的作用为在某些特定的场景下,能够使用简便的代码实现功能,将代码量缩减。
举例如下:
int a; a = get_val(); count_val(a); while (a > 0)//代码1 { a = get_val(); count_val(a); } while (a = get_val(), count(a), a > 0)//代码2:使用逗号表达式 { }
下标引用操作符:操作数:一个数组名+一个索引值
举例如下:
int arr[10]={0}; arr[4] = 10;//[]的两个操作数是arr和4
函数调用操作符:接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
举例如下:
int get_max(int x, int y) { return (x > y ? x : y); } int main() { int a = 10, b = 20,max; max = get_max(a, b);//()函数调用操作符:函数名+若干个函数参数。 printf("max=%d", max); return 0; }
20
访问一个结构的成员:
.结构体.成员名 ->结构体指针->成员名
举例如下:
struct stu //创建一个结构体类型 struct stu { char name[20]; //描述成员的相关变量 int age; char id[100]; }; //分号不要丢掉 int main() { struct stu student1 = { "易烊千玺",22,"2110044120" }; //使用struct stu这个类型创建了一个学生对象s1,并初始化 printf("%d\n", student1.age); //输出对应结构体成员的信息 printf("%s\n", student1.name); printf("%s\n", student1.id); return 0; }
20 易烊千玺 2110044120
下面我们使用指针的方法对成员信息进行访问:
第一种:
struct stu { char name[20]; int age; char id[100]; }; int main() { struct stu student1 = { "易烊千玺",22,"2110044120" }; struct stu* ps = &student1; //定义一个结构体指针指向student1 printf("%d\n", (*ps).age); // *ps就相当于student1 printf("%s\n", (*ps).name); printf("%s\n", (*ps).id); return 0; }
22 易烊千玺 2110044120
第二种:
struct stu { char name[20]; int age; char id[100]; }; int main() { struct stu student1 = { "易烊千玺",22,"2110044120" }; struct stu * ps = &student1; printf("%d\n", ps->age); //使用结构体指针操作符对其进行访问:结构体指针->成员名 printf("%s\n", ps->name); printf("%s\n", ps->id); return 0; }
22 易烊千玺 2110044120