C语言初阶—操作符

        逻辑操作符:

        这段代码的结果是什么?

#include <stdio.h>int main()
{int i = 0,a = 0,b = 2,c = 3,d = 4;i = a++ && ++b && d++;printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);return 0;
}

        计算的时候,a++先使用,是0,&&有短路特性,最左边的表达式是0,&& 连接的只要有一个为假,结果一定为假,右边的就不用计算了,a使用完之后再++,a = 1。b,d 不会改变了,所以a,b,c,d 分别等于 1,2,3,4。

        若a初始化的时候为1。

#include <stdio.h>int main()
{int i = 0,a = 1,b = 2,c = 3,d = 4;i = a++ && ++b && d++;printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);return 0;
}

        && 的时候,遇到 0 一定为假,可以不用接着算下去了,反之则要一直算下去才能得到最终结果。

        || 是否也有相似特性呢?

#include <stdio.h>int main()
{int i = 0,a = 1,b = 2,c = 3,d = 4;i = a++ || ++b || d++;printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);return 0;
}

         计算的时候,a++先使用,是1,|| 有短路特性,最左边的表达式是1,|| 连接的只要有一个为真,结果一定为真,右边的就不用计算了,a使用完之后再++,a = 2。b,d 不会改变了,所以a,b,c,d 分别等于 2,2,3,4。

        若a初始化的时候为0。

#include <stdio.h>int main()
{int i = 0,a = 0,b = 2,c = 3,d = 4;i = a++ || ++b || d++;printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);return 0;
}

        运算过程一样,|| 的时候遇到 1, 一定为真,就可以不用接着算下去了。

        条件操作符:exp1 ? exp2 : exp3

        若条件exp1为真,执行exp2表达式,若条件exp1为假,执行exp3表达式。

        逗号表达式:

        下标引用,函数调用,和结构成员:

        1.下标引用操作符

        操作数:一个数组名 + 一个索引值

#include <stdio.h>int main()
{int arr[5] = {0};arr[1] = 2;2[arr] = 3;//arr[1]--->*(arr + 1)--->*(1 + arr)--->1[arr]//arr是数组首元素的地址//arr + 1 就是跳过1个元素,指向第2个元素//*(arr + 1)就是第2个元素return 0;
}

        能够成功赋值。

        2. ( ) 函数调用操作符

        接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

        3. 访问一个结构的成员

         .        结构体 . 成员名

        ->        结构体指针->成员名

#include <stdio.h>
#include <string.h>struct Stu
{char name[20];int age;double score;
};
void set_stu(struct Stu s)
{strcpy(s.name,"zhangsan");//s.name是字符数组,s.name就是字符串首地址,//把字符串"zhangsan"赋值给一个地址,不能单纯的用=赋值,应该使用strcpy()库函数s.age = 18;s.score = 100;
}
void print_stu(struct Stu s)
{printf("name=%s\n",s.name);printf("age=%d\n",s.age);printf("score=%lf\n",s.score);
}
int main()
{struct Stu s = {0};set_stu(s);print_stu(s);return 0;
}

        可以看到,并不能成功修改,这是因为改变形参并不能达到改变实参的效果。

        要想改变实参,应该传递地址,通过地址解引用来访问实参,修改实参。

#include <stdio.h>
#include <string.h>struct Stu
{char name[20];int age;double score;
};
//void set_stu(struct Stu s)
//{
//	strcpy(s.name,"zhangsan");//s.name是字符数组,s.name就是字符串首地址,
//	//把字符串"zhangsan"赋值给一个地址,不能单纯的用=赋值,应该使用strcpy()库函数
//	s.age = 18;
//	s.score = 100;
//}
void print_stu(struct Stu s)
{printf("name=%s\n",s.name);printf("age=%d\n",s.age);printf("score=%lf\n",s.score);
}
void set_stu(struct Stu* s)
{/*strcpy((*s).name,"zhangsan");(*s).age = 18;(*s).score = 100;*/strcpy(s->name,"zhangsan");s->age = 18;s->score = 100;
}
int main()
{struct Stu s = {0};set_stu(&s);print_stu(s);return 0;
}

           可以看到,可以成功修改​​​​​,并且(*s).name,s->name两种写法都可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/517641.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EVSV08-25、EVSV08-28、EVEP-08、EVEP-10、EVGR-10插装式比例阀放大器

EVBP-10、EVF-12、EVGB-10、EVRB-02、EVGB-E081、EVRB-03、EVF-08、EVRB-06、EVF-10、EVRB-10、EVEP-12、EVR-01、EVR-10、EVR-12、EVR-T8、EVSV08-20、EVSV08-25、EVSV08-28、EVEP-08、EVEP-10、EVGR-10插装式比例阀包括比例止逆阀、比例换向阀、比例调速阀、比例减压阀、比例…

julia语言中的异常处理

在程序运行中&#xff0c;可能会遇到各种预期之外的情况&#xff0c;如用户输入错误、网络故障、硬件问题等。通过异常处理机制&#xff0c;将错误处理代码与正常的业务逻辑代码分离开来&#xff0c;程序可以在遇到这些问题时做出适当的响应&#xff0c;而不是直接崩溃&#xf…

在vue3中使用el-tree-select做一个树形下拉选择器

el-tree-select是一个含有下拉菜单的树形选择器&#xff0c;结合了 el-tree 和 el-select 两个组件的功能。 因为包含了el-tree的功能&#xff0c;我们可以自定义tree的节点&#xff0c;创造出想要的组件 使用default插槽可以自定义节点内容&#xff0c;它的default插槽相当于…

python自动化之获取实际响应数据-登录模块与我的商铺(第四天)

1.配置文件 新建config.py(config包) 2.登录 新建login.py模块(lib-apiLib) 根据接口文档,可知道登录接口的密码需要md5加密 接口文档,如有需要,可在评论区留言!!! login.py代码 # -*- coding: utf-8 -*- # @File : login.py # @Time : 2024/3/4 15:32 # @Autho…

本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)

将本地项目上传到腾讯云轻量应用服务器并实现后续的推送更新&#xff0c;具体步骤如下&#xff1a; 在本地项目目录下初始化 Git 仓库&#xff1a; cd 项目目录 git init将项目文件添加到 Git 仓库并提交&#xff1a; git add . git commit -m "Initial commit"在…

LeetCode_25_困难_K个一组翻转链表

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 模拟 1. 题目 给你链表的头节点 h e a d head head &#xff0c;每 k k k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k k k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节…

kafka消费端消息去重方案

背景 我们在日常工作中&#xff0c;消费kafka消息是一个最常见的操作&#xff0c;不过由于kafka队列中经常包含重复的消息&#xff0c;并且消息量巨大&#xff0c;所以我们消费端总是需要先把消息进行去重后在消费&#xff0c;以减少消费端的压力&#xff0c;那么日常中我们一…

docker的简单使用

在一些进行使用靶场或者工具的时候&#xff0c;我们可以用docker在线拉取&#xff0c;就可以省去手动搭建靶场的过程 一、docker的配置 因为docker是默认从docker的官网进行拉取&#xff0c;所以拉取经常速度很慢或者失败&#xff0c;我们先要进行一下配置&#xff0c;让他优…

电力系统的数字孪生开发流程

电力系统的数字孪生开发流程通常涉及以下关键步骤&#xff0c;这些步骤构成了电力系统数字孪生开发的基本流程。在实际开发过程中&#xff0c;可能会根据具体项目的要求和特点进行调整和补充。例如&#xff0c;可能会加入模型验证的环节以确保模型的准确性&#xff0c;或者加入…

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件&#xff1f; 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

ES单节点部署

ES 拉取镜像 docker pull elasticsearch:7.10.1启动容器 docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "ES_JAVA_OPTS-Xms1g -Xmx1g" -v /es_data:/usr/share/elasticsearch/data --name es 558380375f1a注&#xff1a…