紧接上文,我们将继续进行操作符的讲解
9、条件操作符
条件操作符又叫三目操作符,使用形式如下
那它具体为什么意思呢?
实例应用,求两个数的最大值
1. int a = 5; 2. int b = 8; 3. int max = (a > b ? a : b); //a如果大于b的话会把a赋值给max,如果a不大于b 的话则会把b赋值给max 4. printf("%d\n", max);
10、逗号表达式
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
1. int a = (1, 2, 3, 5); //逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。 2. //整个表达式的最后是5,5最终赋值给a 3. printf("%d\n", a);
11、下标引用、函数调用和结构成员
[ ] 下标引用操作符(就是数组使用的下标引用符)
操作数:一个数组名 + 一个索引值
1. int arr[10] = { 1,2,3,4,5,6,7,8,9,10}; //创建数组 2. 3. printf("%d\n", arr[5]); //打印数组下标为5的元素
() 函数调用操作符
函数名(参数)
于函数调用操作符来说,最少有1个操作数
接下来就是我们的结构成员。结构成员与结构体有一定的联系,在我们的C语言中我们存在两种类型。
一种是内置类型:代表的是我们的‘int’和‘char’。
而另一种则是我们的自定义类型:代表的是我们的结构体,枚举,联合体等。
今天我们就讲讲我们的结构体。
结构体是自定义类型,它也被我们称为——聚合类型。那么为什么要有我们的结构体。这是因为我们生活中有些东西写为C语言代码的时候,不能单纯的用内置类型。
我们先看一下结构体关键字:struct
作用:创建不同数据类型的一个集合。它的本质是变量的集合。
语法:
1. struct TypeName 2. 3. { 4. 5. Type1 var1; 6. 7. Type2 var2; 8. 9. .... 10. 11. TypeN varN; 12. 13. };
定义好一个Struct结构体之后,就可以使用了:
比如我们出版一本书,书的话肯定要有书名,要有作者和售价这几样东西,但是它们的类型又不相同。
这时候我们就可以使用结构体,下面就是我们定义的结构体和使用
1. //struct Book 2. //{ 3. // char name[30];//成员 书名 4. // char author[20];//作者 5. // float price;//售价 6. //}; 7. // 8. // 9. //int main() 10. //{ 11. // struct Book b1 = {"剑来", "烽火戏诸侯", 66.5f};//书 12. // struct Book b2 = {"不良人", "若森", 88.6f};//书 13. // printf("%s %s %.1f\n", b1.name, b1.author, b1.price); 14. // printf("%s %s %.1f\n", b2.name, b2.author, b2.price); 15. // 16. // //结构体变量.成员名 17. // return 0; 18. //}
上述代码涉及一个操作符 ,. 操作符用于取值:b1.name,b1.auther,这里的 . 可以理解为的,那么b1.name可理解为b1.name
除了 . 操作符,我们还有->操作符,使用如下
1. //void Print(struct Book * p) 2. //{ 3. // printf("%s %s %.1f\n", (*p).name, (*p).author, (*p).price); 4. // printf("%s %s %.1f\n", p->name, p->author, p->price); 5. // //-> 6. // //结构指针->成员名 7. //} 8. // 9. //int main() 10. //{ 11. // struct Book b1 = {"剑来", "烽火戏诸侯", 66.5f};//书 12. // struct Book b2 = { "不良人", "若森", 88.6f };//书 13. // Print(&b1); 14. // Print(&b2); 15. // return 0; 16. //}
->操作符用于指针的取值,(*p).name与p->name的计算结果是相同的
总结
. 操作符用于取值:b1.name(取值为66.5)
->操作符用于指针的取值:p->auther(取值为若森)