前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言:详解操作符(下)

C语言:详解操作符(下)

作者头像
GG Bond1
发布2024-06-14 20:42:19
640
发布2024-06-14 20:42:19
举报
文章被收录于专栏:C/C++葵花宝典

摘要:

在上篇文章中,我们已经讲过位操作符等涉及二进制的操作符,这些有助于帮助我们后期理解数据如何在计算机中运算并存储,接下来本篇将更多的讲述一些C语言中经常要使用到的操作符。

一、单目操作符

单目操作符是指只有一个操作数的操作符,主要有

!、++、–、&、*、+、-、~ 、sizeof、(类型)

单目操作符这些内容在我之前一篇文章有提过:算数操作符和算数操作数

二、逗号操作符

逗号操作符还是很非常有意思的,因为在日常学习中经常会有人不去重视,就容易出一些笑话,我们先来看个例子

代码语言:javascript
复制
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式
c是多少?

此时C值是多少?是12?还是1?或者是3? 答案是都不是,是13。此时肯定会有人不明白了,其实这就跟逗号表达式的性质有关:

逗号表达式,从左向右依次执⾏整个表达式的结果是最后⼀个表达式的结果。

基于此性质,所以上面那个表达式实际上要一步一步执行,按照下图这样的顺序一步一步执行,并得到最终结果。

逗号操作符其他用法都是基于性质的,只要记住要先按步骤进行就行。

三、下标引用操作符[ ]、函数调用操作符( )

1、下标引用操作符[ ]

下标引用操作符是双目操作符,它有两个操作数,一般用来表示数组时会用到,人们往往会有一个误区,认为字母应该在外面,数字在里面,实际上是无所谓的,

例如:

代码语言:javascript
复制
int arr[9];
int 9[arr];

上面这两个其实是一样的,下标引用其实是类似于加减法之类的,两个操作数顺序位置并不重要。 在学到指针这些内容后,下标引用有了更多的用法,我个人觉得它还有解引用的用法。

2、函数调用操作符( )

函数调用操作符前面的是函数名,这个可以需要自己命名,里面的是要传的参数

函数调用操作符比较容易理解,可以看一下下面的例子:

代码语言:javascript
复制
#include <stdio.h>
void test1()
{
 printf("hehe\n");
}
void test2(const char *str)
{
 printf("%s\n", str);
}
int main()
{
 test1(); //这⾥的()就是作为函数调⽤操作符。
 test2("hello bit.");//这⾥的()就是函数调⽤操作符。
 return 0;
}

四、结构体成员访问操作符

C语言中虽然已经给出许多变量类型,例如:int、float、short等,但是有些变量还是无法描述,例如如果要描述一个学生,你需要知道他的名字、学号、身高、体重等等,这就需要其他类型了,C语言通过结构体给我们自己创建类型的方式来满足各种需要。

1、结构体的声明

代码语言:javascript
复制
struct tag
{
 member-list;
}variable-list;

描述上面说的那个学生变量:

代码语言:javascript
复制
struct Stu
{
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}; //分号不能丢

2、结构体的定义和初始化

定义的时候可以在主函数外面,也可以在里面:

代码语言:javascript
复制
struct Point
{
 int x;
 int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2

结构体变量初始化:

代码语言:javascript
复制
int main
{
 struct Stu s={"zhangsan",18,"nan","34285967"};
 }

(看看结构体中定义了哪些变量,一个一个赋值)

结构体嵌套:

代码语言:javascript
复制
struct Node
{
 int data;
 struct Point p;
 struct Node* next; 
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

3、结构体成员直接访问

结构体成员直接访问是通过操作符( . )来实现的 方式:结构体变量.成员名

例如:

代码语言:javascript
复制
struct Student
{
    char name[20];
    int age;
    int high;
}p = { "zhangsan" ,18,150 };
int main()
{
    printf("%s %d %d", p.name, p.age, p.high);
    return 0;
}

4、结构体成员间接访问

结构体成员的间接访问,是通过指向结构体的指针来实现的。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
struct Stu
{
    char name[15];//名字
    int age; //年龄
};
void print_stu(struct Stu s)
{
    printf("%s %d\n", s.name, s.age);
}
void set_stu(struct Stu* ps)
{
    strcpy(ps->name, "李四");
    ps->age = 28;
}
int main()
{
    struct Stu s = { "张三", 20 };
    print_stu(s);
    set_stu(&s);
    print_stu(s);
    return 0;
}

五、操作符的优先级和结合性

1、操作符的优先级

操作符的优先级看下面这个表格就行:

2、操作符的结合性

操作符的结合性一般为左结合性和右结合性,其实结合性还是有些意思的,例如

代码语言:javascript
复制
int c=1;
int b=0;
b=(c++)+(c++)+(++c);

此处c的值就是有歧义的,所以要尽量避免写出这样的表达式。 结语: C语言操作符的内容到这里也是初步结束了,以后会根据需求进行补充,鉴于本人能力有限,欢迎大家指出错误和意见。 创作不易,还请一键三连。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、单目操作符
  • 二、逗号操作符
  • 三、下标引用操作符[ ]、函数调用操作符( )
    • 1、下标引用操作符[ ]
      • 2、函数调用操作符( )
      • 四、结构体成员访问操作符
        • 1、结构体的声明
          • 2、结构体的定义和初始化
            • 3、结构体成员直接访问
              • 4、结构体成员间接访问
              • 五、操作符的优先级和结合性
                • 1、操作符的优先级
                  • 2、操作符的结合性
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档