初识C语言(三)
文章目录
前言
八、函数
九、数组
(1)数组的定义
(2)数组的下标和使用
十、操作符
(1)算数操作符
(2)移位操作符
(3)位操作符
(4)赋值操作符
(5)单目操作符
(6)关系操作符
(7)逻辑操作符
(8)条件操作符
(9)逗号表达式
(10)下标引用、函数调用和结构成员
十一、常见关键字
总结
前言
我们在上个文章学习了,常量变量的作用域,生命周期以及等等,我们了解了字符串,转义字符注释等相关了解,我们还了解了选择语句和循环语句中的while语句,剩下的for和do while 循环之后会进行详细分析。
。
八、函数
就像数学中的函数,y=f(x)
C语言中的函数也跟数学中的函数也差不多。
例如以下代码,一下代码是求两个和:
#include <stdio.h>
int main( )
{int num1 = 0;int num2 = 0;int sum = 0;scanf("%d %d",&num1,&num2);//输入sum = num1+num2;//求和printg("%d\n",sum);return 0;
}
我们用函数来写求两个数的和:
#include <stdio.h>
int main( )
{int num1 = 0;int num2 = 0;int sum = 0;scanf("%d %d",&num1,&num2);//输入sum =Add(num1,num2);//求和printg("%d\n",sum);return 0;
}
这里的Add就是一个函数,来进行相加,我们可以把它想象成为一个工厂,对输入的材料进行加工,最后产出产品。这里的Add要进行加法操作,所以传进来的要是两个数,加数和被加数,也就是num1和num2,之后返回一个结果;
Add(int x,int y)
{int z = 0;z = x+y;return z;
}
我们来进行Add函数的实现,首先是Add函数的名字,函数里面要传入两个数,我们在这里认为传入的数是两个整数,所以定义这两个数分别是x和y,函数的外壳写好了,接下来该分析函数内部如何实现,要计算两个数相加,我们定义一个整形z来表示结果,z等于这两个数进行相加,最后返回z,因为z是整形,所以函数返回的类型是整形。这时这个函数就写好了,在main函数中调用和传入参数就可以了。这里num1和num2叫做传入参数。
函数比较方便,随时调用,避免了重复。
九、数组
(1)数组的定义
当我们存储1-10的数字,我们是否要定义十个变量来进行存储,那样就会很麻烦,也许会觉得也就写十行代码的事,但要是要存储100个数字呢,是否还是一句一句打出来,那样是真的很麻烦。所以才会出现数组这个概念。
数组中可以存放一组相同类型的元素,也就是一组相同类型元素的集合。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
上列代码就是数组的创建和初始化,我们命名数组的名字为arr,想让它里面有十个元素,所以定义里面10,又想让它的元素都是整形,所以在前面定义Int,添加等号来写数组里面的十个数从1-10。这样就创建了一个包括10个整形元素的数组。
(2)数组的下标和使用
数组里的元素是放在内存里面的,数组里每个元素都有下标的,而下标是从0开始的,如下:
是可以通过下标的方法来找到数组中的元素的,如下,如果我们想要通过下标来找到数字7,那么就要访问下标为6的元素。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[6]);
如果我们想把所有元素打印出来,可以通过while和下标来打印出来,while使i从0循环到9,也就是arr元素的下标,也就打印出来了这十个数:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[6]);
int i = 0;
while(i<10)
{printf("%d",arr[i]);
}
十、操作符
C语言中提供了非常丰富的操作符,使得C语言非常的灵活,什么事都可以干。
(1)算数操作符
算数操作符
+ - * / %
算数操作符就是加减乘除和取余(%),当我们用15除(/)上一个2的时候,结果就是7 ,除法默认是整形,取余(模)就是得到余数。
如果我们除法想要得到小数的时候,我们前面给这个变量定义成float浮点数类型,之后用%f来输出结果,也就是打印浮点数类型,如果你那么想,那就错了哈哈。
如果除号的两端都是整数,那么执行的是整数的除法,除号两边至少有一个是浮点数才能执行浮点数的除法。
但是当取模的时候,两边都是整数才行。
(2)移位操作符
移位操作符
>> <<
左移和右移,这些都跟二进制有关,后续会进行深入了解
(3)位操作符
位操作符
& ^ |
按位与 按位或 按位异或,也与二进制有关,到后面深入了解
(4)赋值操作符
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
int main( )
{int a = 0;//初始化a = 20; //赋值a = a+5; //a+=5;return 0;
}
当我们初始化一个变量a,并且赋值给20,想要加5还赋给a,也可以写成a=a+5, 这与a=a+5一样,没有差别。其它的也都一样,进行操作后又赋值给自己。
(5)单目操作符
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置,后置--
++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
// ! 的使用
int main( )
{int a =5;if(a){printf("OK\n");}if(!a){printf("NO\n");}return 0;
}
在C语言中,非零为真,0为假,所以在这里,a不为假,在这里会进行下一步操作,也就是打印OK,如果我们想要进行打印NO,那么就要a为假,这里就用到了!,表示相反的逻辑,如果这时候a为0,所以这时候就打印NO。
// -
int a = 10;
int b = -a;
这里b的数就是-10,这就是负号的使用,而当用到正号的时候。
// +
int a = -10;
int b = +a;
当时我也以为b是10,但是结果出来后确是-10,没有发生变化,所以正号也可以省略不用写。
&后续会进行分析。
重点:sizeof是操作符
int a =10;
float f =5.5f;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(f));
sizeof 是操作符 ,是计算变量所占内存空间的大小,单位是字节,这里a和f的字节数都是4,我们也可以将a和f换成int和float,所以里面放变量名也好,或者是变量的类型来说,结果都是一样的,两种写法都可以。
而我们之前提到的strlen是库函数,是计算字符串长度的,统计的是字符串\0之前出现的个数。而sizeof不管里面是什么,它只统计占用的字节内存是多少。
// ++
int a =100;
int b = a++;
当++在后面的时候,这是后置++,先使用,后++,也就是先使用100,之后在自增1,变成了101。
当++在前面的时候,就是前置++,与之前的相反,也就是先加1,再使用,这时候a和b都是101。
--操作符也是这个原理,相同的逻辑但是不同的运算。
//(类型)强制类型转换
int main( )
{int a =(int)3.14;printf("%d\n",a);return 0;
}
当我们写一个整形变量a的时候 ,想把3.14赋值给a,如果不加(Int),编辑器就会报错,说你可能会丢失数据,当加上(int)的时候,就将3.14强制类型转换,转换为整形,只保留正数部分。
(6)关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
关系操作符就这么几个,用来表示关系,判断大小关系,其中==是判断相等的,而一个等号=就是赋值,当写选择语句的时候,要考虑清楚,两个等号是用来判断,一个是用来赋值。
(7)逻辑操作符
&& 逻辑与
|| 逻辑或
逻辑与的意思就是并且,两个都需要,而逻辑或是或者的意思,来一个就行或者两个都来,
int a =3;
int b =5;
if(a && b)
{printf("OK\n");
}
一般是用来判断真假,也可以用来选择范围,这里a为3,b为5,两个同时是真,所以会打印OK,如果有一个是0,则不会打印,因为非0为真。
&&两边同时为真才为真,有一个为假了就为假。
|| 两边同时为假才为假,有一个为真就为真。
(8)条件操作符
exp1 ? exp2 : exp3
int a = 0;
int b = 0;
int m = 0;
scanf("%d %d", &a,&b);
if(a>b)m=a;
elsem=b;
printf("%d\n",m);
这是一个比较两个数输出较大值的一个简单写法,如果觉得这样写繁琐,就可以用条件逻辑符来进行写:
m=(a > b ? a : b);
如果表达式1里面的a>b这个条件为真,表达式2就执行,也就是返回a的值,如果表达式为假,就返回b的值,这个只能用于简单的语句。
(9)逗号表达式
exp1 , exp2 , exp3 , ...expN
(10)下标引用、函数调用和结构成员
[ ] ( ) . ->
[ ]下标引用操作符
下标引用,就是刚才用数组通过下标来访问元素的符号。
()函数调用操作符
上文中写了一个两个数相加的函数,Add来调用的时候,后面的()就是函数调用操作符。
. 和 ->是结构成员访问操作符
操作符非常的丰富 ,后续都进行深入了解。这里先简单的了解一下,不同场景用不同操作符。
十一、常见关键字
关键字必须要知道有什么,因为当我们在定义变量的时候,如果不知道关键字,就有可能会用关键字名字来命名变量名字,这些关键字是C语言事先预定好的,变量的命名之前说事不能有关键字的。
auto break case const continue default do else enum
extern for goto if register return sizeof static struct
switch typedef union volatile while char double float int
long short signed unsigned void
auto关键字一般被省略了,因为局部变量一般都是在作用域里面自动创建自动销毁的,所以它其实前面有一个auto ,由于所有局部变量前面都有auto,所以就省略掉了。
break可以打破循环,在循环中可以使用。
case是在分支语句switch中使用。
类型有关:auto cha r int short long float double signed(有符号的) unsigned(无符号) static void enum const union typedef
循环有关:break continue do while
分支有关:if else switch case break default goto
声明外部符号:extern
寄存器:reister
函数:return
计算所占内存大小:sizeof
先进行了解,用多了就记住了。
总结
码要用手敲才会熟练
先了解,后续会一个个进行详解,对于我来说也是受益匪浅。
相关文章:

初识C语言(三)
感兴趣的朋友们可以留个关注,我们共同交流,相互促进学习。 文章目录 前言 八、函数 九、数组 (1)数组的定义 (2)数组的下标和使用 十、操作符 (1)算数操作符 (2ÿ…...

用通义灵码如何快速合理解决遗留代码问题?
本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。 什么是遗留代码 与过时技术相关的代码: 与不再受支持的…...

新书推荐——《Python贝叶斯深度学习》
在过去的十年中,机器学习领域取得了长足的进步,并因此激发了公众的想象力。但我们必须记住,尽管这些算法令人印象深刻,但它们并非完美无缺。本书旨在通过平实的语言介绍如何在深度学习中利用贝叶斯推理,帮助读者掌握开…...

数据结构-3.1.栈的基本概念
一.栈的定义: 栈和线性表的区别:栈只能在表尾一端进行插入或者删除的操作,而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语: 三.栈的基本操作: 1.回顾线性表的基本操作: 2.栈的基本操作&…...

关于 NLP 应用方向与深度训练的核心流程
文章目录 主流应用方向核心流程(5步)1.选定语言模型结构2.收集标注数据3.forward 正向传播4.backward 反向传播5.使用模型预测真实场景 主流应用方向 文本分类文本匹配序列标注生成式任务 核心流程(5步) 基本流程实现的先后顺序…...

linux如何启用ipv6随机地址
简介 在 IPv6 中,临时随机地址(Temporary IPv6 Address)是一种为了提高隐私和安全而设计的功能。通常,默认的 IPv6 地址是基于设备的 MAC 地址生成的,容易导致跟踪和识别设备。启用临时 IPv6 地址可以避免这个问题&am…...

探索 Android DataBinding:实现数据与视图的完美融合
在 Android 开发中,数据与视图的交互一直是一个关键的问题。为了更好地实现数据的展示和更新,Google 推出了 DataBinding 库,它为开发者提供了一种简洁、高效的方式来处理数据与视图之间的绑定关系,大大提高了开发效率和代码的可读…...

Java 编码系列:线程基础与最佳实践
引言 在多任务处理和并发编程中,线程是不可或缺的一部分。Java 提供了丰富的线程管理和并发控制机制,使得开发者可以轻松地实现多线程应用。本文将深入探讨 Java 线程的基础知识,包括 Thread 类、Runnable 接口、Callable 接口以及线程的生命…...

《深度学习》—— ResNet 残差神经网络
文章目录 一、什么是ResNet?二、残差结构(Residual Structure)三、Batch Normalization(BN----批归一化) 一、什么是ResNet? ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出,斩获…...

针对考研的C语言学习(定制化快速掌握重点3)
1.数组常见错误 数组传参实际传递的是数组的起始地址,若在函数中改变数组内容,数组本身也会发生变化 #include<stdio.h> void change_ch(char* str) {str[0] H; } int main() {char ch[] "hello";change_ch(ch);printf("%s\n&q…...

pikachu XXE(XML外部实体注入)通关
靶场:pikachu 环境: 系统:Windows10 服务器:PHPstudy2018 靶场:pikachu 关卡提示说:这是一个接收xml数据的api 常用的Payload 回显 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY …...

shell脚本定时任务通知到钉钉
shell脚本定时任务通知到钉钉 1、背景 前两天看了一下定时任务,垃圾清理、日志相关、系统巡检这些,有的服务器运行就有问题,或者不运行,正好最近在做运维标准重制运维手册,顺便把自动化这块优化一下,所…...

2.4K star的GOT-OCR2.0:端到端OCR 模型
GOT-OCR2.0是一款新一代的光学字符识别(OCR)技术,标志着人工智能在文本识别领域的重大进步。作为一款开源模型,GOT-OCR2.0不仅支持传统的文本和文档识别,还能够处理乐谱、图表以及复杂的数学公式,为用户提供…...

【JavaEE】——线程的安全问题和解决方式
阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:问题引入 二:问题深入 1:举例说明 2:图解双线程计算…...

初步认识了解分布式系统
背景认识:我们要学习redis,还是得了解一下什么是分布式。为什么呢?因为redis只有在分布式系统中才能发挥它最大的作用,也就是领域展开,所以接下来我们就简单过一下什么是分布式系统 一些术语认识: &#x…...

react 为什么不能学习 vue3 进行静态节点标记优化性能?
因为 React 使用的是 JSX,而 JSX 本质上就是 JS 语言,是具有非常高的动态的,而 Vue 使用的 template 则是给了足够的约束,比如说 Vue 的 template 里面使用了很多特定的标记来做不同的事情,比如说 v-if 就是进行变量判…...

Elasticsearch黑窗口启动乱码问题解决方案
问题描述 elasticsearch启动后有乱码现象 解决方案: 提示:这里填写该问题的具体解决方案: 到 \config 文件下找到 jvm.options 文件 打开后 在文件末尾空白处 添加 -Dfile.encodingGBK 保存后重启即可。...

Logtus IT员工参加国际技术大会
Logtus IT的员工参加了国际技术大会,该大会致力于在金砖国家框架内开发俄罗斯的技术。该活动包括一个展览,俄罗斯开发商展示了他们的信息技术、电子和电信成就。展示了面向国内和国际市场(包括政府机构)的解决方案、产品和平台。 …...

ant design vue组件中table组件设置分组头部和固定总结栏
问题:遇到了个需求,不仅要设置分组的头部,还要在顶部有个统计总和的栏。 分组表头的配置主要是这个,就是套娃原理,不需要展示数据的直接写个title就行,需要展示数据的字段才需要详细的配置属性。 const co…...

2024年信息安全企业CRM选型与应用研究报告
数字化的生活给人们带来便利的同时也带来一定的信息安全隐患,如网络侵权、泄露用户隐私、黑客攻击等。在互联网高度发展的今天,信息安全与我们每个人、每个组织甚至每个国家都息息相关。 信息安全行业蓬勃发展。根据智研咨询数据,2021年&…...

【后端开发】JavaEE初阶——计算机是如何工作的???
前言: 🌟🌟本期讲解计算机工作原理,希望能帮到屏幕前的你。 🌈上期博客在这里:【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解) 🌈感兴趣的小伙伴看一看小编主…...

Linux(Ubuntu)源码安装postgresql16.3
文章目录 Linux(Ubuntu)源码安装postgresql016.3下载程序包编译安装软件初次执行configure错误调试1:configure: error: ICU library not found再次执行configureBuild 设置环境初始化数据库启动数据库参考 Linux(Ubuntu)源码安装…...

Python 入门教程(7)面向对象 | 7.6、多态
文章目录 一、多态1、鸭子类型2、实现多态的机制2.1、鸭子类型2.2、继承与重写 3、Python多态的优势4、总结 前言: 在面向对象编程(OOP)中,多态(Polymorphism)是一种非常重要的概念,多态就是同一…...

Cilium + ebpf 系列文章-什么是ebpf?(一)
前言: 这篇非常非常干,很有可能读不懂。 这里非常非常推荐,建议使用Cilium官网的lab来辅助学习!!!Resources Library - IsovalentExplore Isovalents Resource Library, your one-stop destination for ins…...

RabbitMQ08_保证消息可靠性
保证消息可靠性 一、生产者可靠性1、生产者重连机制(防止网络波动)2、生产者确认机制Publisher Return 确认机制Publisher Confirm 确认机制 二、MQ 可靠性1、数据持久化交换机、队列持久化消息持久化 2、Lazy Queue 惰性队列 三、消费者可靠性1、消费者…...

恶意Bot流量识别分析实践
1、摘要 随着互联网的发展,自动化工具和脚本(Bots)的使用越来越普遍。虽然一些善意 Bots 对于网站的正常运行和数据采集至关重要,但恶意 Bots 可能会对网站带来负面影响,如爬取敏感信息、恶意注册、刷流量等。因此&am…...

Java2 实用教程(第6版)习题2 第四题
【源文件的命名与书中的不同】 四、阅读程序题 1、上机运行下列程序,注意观察输出的结果。 public class E2_1 {public static void main(String args[]){for(int i20302;i<20322;i){System.out.println((char) i);}} } 运行结果: 低 住 佐 佑 佒…...

HashMap和ConcurrentHashMap的区别
1.是什么 HashMap和ConcurrentHashMap都是Java集合框架中的成员,它们用于存储键值对,但它们在并发场景下的表现和行为有很大的不同。以下是它们之间的一些主要区别: 1. 并发安全性 HashMap: HashMap不是线程安全的。如果多个线程同时访问Has…...

css 下拉框展示:当hover的时候展示下拉框 z-index的用法解释
代码如下: <template><div class"outer"><div class"left"></div><div class"aTest2"><div class"box">显示方框</div><div class"aTest3"></div></…...

spring装配笔记
spring装配是个大课题,能懂一点是一点吧。 关于代码链路,最后的方式就是倒序摸索,正序那么多逻辑,没有一百万也差不多少,所以就用倒序。 .(点号)和#井号是一个意思,下面代码可能不详细区分,复…...