当前位置: 首页 > news >正文

【C语言】8.C语言操作符详解(2)

文章目录

  • 6.单⽬操作符
  • 7.逗号表达式
  • 8.下标访问[]、函数调⽤()
    • 8.1 [ ] 下标引⽤操作符
    • 8.2 函数调⽤操作符
  • 9.结构成员访问操作符
    • 9.1 结构体
      • 9.1.1 结构的声明
      • 9.1.2 结构体变量的定义和初始化
    • 9.2 结构成员访问操作符
      • 9.2.1 结构体成员的直接访问
      • 9.2.2 结构体成员的间接访问


6.单⽬操作符

单目操作符有这些:

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

单目操作符的特点是只有一个操作数,在单目操作符中只有 &* 没有介绍,这2个操作符,我放在后面指针那一节介绍。

需要注意

&作为双目操作符的时候是按位与,作为单目操作符的时候是取地址。

a & b —>按位与

&a —>取地址


7.逗号表达式

exp1,exp2,exp3,...expN

逗号表达式,就是用逗号隔开的多个表达式。

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

例1:

int main() {int a = 1;int b = 2;int c = (a > b, a = b + 10, a, b = a + 1);printf("%d\n", c);return 0;
}

打印:

13
  1. 先算a>b,这步没什么影响。因为没有赋值,只是单纯的比较了一下。这个表达式的结果是0。
  2. 然后算a = b + 10,a=2+10=12。这个表达式的结果是12。
  3. 然后算a,这步没什么影响,因为没有赋值。这个表达式的结果是12。
  4. 然后算b = a + 1,b=12+1=13。这个表达式的结果是13。
  5. 上面一步得到的13,是逗号表达式的值,所以c=13。
  6. 打印c的值,输出13。

逗号表达式一定要从左向右算,因为前面的运算可能会影响后面。

我们接着来看下面一段代码:

int main() {int a = 0;a = get_val();count_val(a);while (a > 0) {a = get_val();count_val(a);}return 0;
}

这段代码我们可以看到3,4行和6,7行一样,看起来比较麻烦。

我们可以优化一下:

int main() {int a = 0;while (a = get_val(),count_val(a), a > 0) {}return 0;
}

实际上两个代码的功能一样,但是看上去逻辑清晰了不少。


8.下标访问[]、函数调⽤()

8.1 [ ] 下标引⽤操作符

int main() {int arr[10] = { 1,2,3,4,5 };int m = arr[4];//数组中下标是4的元素//[ ]:下标引用操作符;操作数是arr和4;这个4我们叫做数组下标或索引//3+5:+是操作符;3和5是操作数printf("%d\n", m);return 0;
}

8.2 函数调⽤操作符

int Add(int x, int y) {return x + y;
}int main() {printf("hehe\n");//这里的():就是函数调用操作符;操作数是printf和hehe\nprintf("%d\n",100);//操作数是printf和%d\n和100int ret = Add(3, 5);//操作数是Add,3,5//函数调用操作符最少有几个操作数?//1个,在一个函数不去传参的时候,就只有1个操作数,也就是函数名return 0;
}

9.结构成员访问操作符

9.1 结构体

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量、数组、指针,甚至是其他结构体。

9.1.1 结构的声明

struct tag
{member-list;//成员列表,这个里面至少要有1个成员
}variable-list;//变量列表

9.1.2 结构体变量的定义和初始化

创建结构体变量:

//学生类型
struct Student {//成员变量char name[20];int age;float score;
};struct Student s3;//全局变量int main() {int a;struct Student s1;//局部变量//这个s1就是用Student这个学生类型创建的对象。struct Student s2;return 0;
}
//学生类型
struct Student {//成员变量char name[20];int age;float score;
}s4, s5, s6;//全局变量
//这里面的s4, s5 ,s6和上面的s3一个意思,就是写法不同

初始化结构体变量:

//学生类型
struct Student {//成员变量char name[20];int age;float score;
}s4 = { "小李",22,22.2 }, s5, s6;//全局变量struct Student s3 = { "王五",25,88.8 };//全局变量int main() {int a;struct Student s1 = { "翠花",20,98.0 };//局部变量struct Student s2 = { "旺财",18,69.8 };return 0;
}

结构体变量的嵌套定义和初始化:

struct Point {int x;int y;
};struct S {char ch;struct Point p;int arr[10];double d;
};int main() {int a;struct Point p = { 10,20 };struct S s = { 'a',{4,5},{1,2,3,4,5,6,7},3.14 };return 0;
}

9.2 结构成员访问操作符

9.2.1 结构体成员的直接访问

结构体变量.结构体成员名

->这个是依赖指针的,会在后面讲指针的章节详细讲到。

struct Point {int x;int y;
};struct S {char ch;struct Point p;int arr[10];double d;
};int main() {int a;struct Point p = { 10,20 };struct S s = { 'a',{4,5},{1,2,3,4,5,6,7},3.14 };printf("%c\n", s.ch);//访问了结构体变量s里面的ch元素printf("坐标是:%d %d\n", s.p.x, s.p.y);printf("%d\n", s.arr[0]);printf("%lf\n", s.d);return 0;
}

打印:

a
坐标是:4 5
1
3.140000

9.2.2 结构体成员的间接访问

有时候我们得到的不是一个结构体变量,而是得到了一个指向结构体的指针。

结构体指针->成员名

#include <stdio.h>
struct Point
{int x;int y;
};int main()
{struct Point p = {3, 4};struct Point *ptr = &p;ptr->x = 10;ptr->y = 20;printf("x = %d y = %d\n", ptr->x, ptr->y);return 0;
}

现在看不懂没事,后面讲指针的时候会讲到。

http://www.lryc.cn/news/351191.html

相关文章:

  • vivado 物理约束KEEP_HIERARCHY
  • Linux 三十六章
  • ntsd用法+安装包
  • Nacos 微服务管理
  • Kubernetes集群上的Etcd备份和恢复
  • 创建型模式 (Python版)
  • ​​​【收录 Hello 算法】9.4 小结
  • MYSQL数据库基础语法
  • R实验 参数检验(二)
  • 【Linux】进程信号及相关函数/系统调用的简单认识与使用
  • Spring (14)什么是Spring Boot
  • 区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测
  • Java集合框架全景解读:从源码到实践精通指南
  • Python | Leetcode Python题解之第107题二叉树的层序遍历II
  • H4vdo 台湾APT-27视频投放工具
  • 数据结构(树)
  • HTML静态网页成品作业(HTML+CSS)——川西旅游介绍网页(2个页面)
  • MySQL数据库单表查询中查询条件的写法
  • SQL靶场搭建
  • Cocos Creator 帧动画播放组件制作详解
  • 基于STM32控制的双轮自平衡小车的设计
  • Dijkstra算法在《庆余年》中的应用:范闲的皇宫之旅
  • HTML静态网页成品作业(HTML+CSS)——利物浦足球俱乐部介绍网页设计制作(5个页面)
  • mac 查看占用80端口的命令
  • 【Qt常用控件】—— 布局管理器
  • 模板中的右值引用(万能引用)、引用折叠与完美转发
  • Nacos启动报错:[db-load-error]load jdbc.properties error
  • 5.23相关性分析
  • 使用 Sonatype Nexus Repository Manager 如何安装npm.md
  • console如何连接远程机器上的java程序