初识c语言(二)


前言

亲爱的小伙伴们大家好啊!我是叶超凡大家通过上个文章的内容的应该对c语言有个大致的了解,以及对我写文章的风格也有了大致的了解,由于是第一次写文章,对文章的格式,以及排版有些许不了解,给大家带来了不便,在这里对大家说一声不好意思啦!这篇文章我采用了更加的简洁的排版方式,来方便大家更好的学习,那么我们废话不多说我们开始啦!


一.字符串

1.为什么会有字符串

我们前面学习了各种类型有字符型char,有整形int ,有浮点型float,他们之间对应着不同的类型的数据,比如说int他就可以储存像100这样的整形数据,比如说float他就可以储存像16.5这样的浮点型数据,比如说char他就可以储存像‘w’这样的字符型数据,那我们这里就出现了一个问题,这些数据好像都只能储存一个数据啊,那我要是想储存”abcd%efghigk“这个数据怎么存呢?用int还是用char呢?是不是都不大行,那这里我们就要引入一个新的概念就是字符串。

2.字符串的存储,以及\0所产生的问题

比如说“abcdef”这就是字符串,在c中有字符型,有整形,有浮点型,那这里是不是应该有个叫字符串内型呢?抱歉哈!我们c语言没有字符串型,我们把这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。那我们怎么将这个字符串存入电脑呢?那这时我们就可以用到我们数组比如说char arr[10]=“abcdef”;这里我们定义的数组的大小是10.我们后面的字符的数目也没有10个,所以我们是很轻松的将这个字符串存储下来,如果我们有时候不知道后面的字符有多少个的时候,我们可以将[]里面的数字去掉什么都不用填,我们的电脑会自动根据后面字符串的内容来判断得分配多少空间。但是这个数组里面装的真的是眼睛看到的内容吗?
在这里插入图片描述

我们按CTRL+Fn+F10开启调试功能再点击窗口开启监视功能,我们随便打开一个窗口再输入arr1便可以看到外面,数组里面的内容,但是这里外面发现在这个数组的末尾有个\0,这时候我们有些小伙伴们可能就感到十分的困惑了,我自己的字符串里面视乎没有\0啊?我们先不着急,我们可以这样,我们再创建一个数组,并且放入的数据与arr1相同但是我们创建的方式不一样,我们不以字符串的类型进行创建,我们将字符一个一个的放入进去,然后再看看这两个数组的内容有什么不同
在这里插入图片描述
我们通过这张图片可以看的出来这两个数组之间大致的内容都相同就是在数组的后面差了一个\0那这会造成什么影响呢?我们再来看一张图片我们用printf函数将两个数组打印出来,在这里插入图片描述
啊这时候我们便可以看出这第二个数组打出来的emmmm准确的说前面的内容是对的,这后面的是什么鬼啊!那我们再来想想为什么会出现这样的问题呢?我们就差一个\0咋内容差别这么大呢?这时我们就不得不得说一下\0的作用了,我们的字符串其实是有一个结束标志,这个标志就是\0的转义字符。在计算字符串长度的时候\0是结束的标志,不算作字符串的内容。我们可以将电脑的内存看成一栋高楼,我们的一个数组向电脑申请的空间就相当与一栋高楼中的一层中的一个房子,假设这个房子的编号为404,那么他的前面是不是应该有403,他的后面是不是也应该有405那我们这个\0就好比这个不同房子之间的墙,我们的arr1自带一个\0,而我们的arr2却没有带\0,我们假设arr2所住的房子的编号为404,那我们在参观这个arr2的房子的的时候是不是就会顺便看到405这个房子长什么样的啊,我们这里的参观便是c语言中printf的意思,那我们看到这个应该便能明白了,我们这个第二个数组里面的内容是不含有\0的,那么我们在打印这个数组的时候,打印完了abcdef之后由于没有\0那么是不是就会一直打印下去,直到出现了\0为止。看到这里我们便可以理解为什么我们的字符串会自动添加\0这个转义字符,以及这个转义字符的作用。那我们怎么来解决这个问题呢?我们可以更改arr2的内容我们可以在后面加上’\0‘便可以在他的房子里加上一堵墙,便可以防止他打印其他内存的内容。其实这里我们还有一个方法可以证明其\0的作用性,这里我们就来用strlen这个函数来证明,这个函数是用来求字符串的长度的,返回的类型为int类型,其头文件为#include<string.h>,那我们知道了这个函数是不是可以验证其\0 的重要性,我们说了如果没有\0那么会访问其他内存的内容,如果有则不会访问,我们来看几张图片便可以得到我们的想要的结果
在这里插入图片描述
这是没有加\0的字符串,我们发现的他的长度不是6,这是不是从一方面说明了没有\0的字符串会访问其他的内存的数据,那么只要我们加个\0如果不会访问其他的内存是不是就可以验证\0的作用是字符串结束的标志那我们再来看看
在这里插入图片描述
我们加了\0,毫无悬念结果长度就为6,这样我们就可以通过另一种方法来验证\0 的作用,当然这里还有一种情况就是如果我们我们定义了一个类似于arr2[]类型的数组,里面没有\0的话我们可以在括号里面输入一个更大的数字在括号里面这样的话多余的空间便会自动填充并且为0,又因为\0的ascall码值也是0,所以我们这里0和\0可以看成一个东西,所以只要情况是char arr[4]={ ‘a’,‘b’,‘c’}时我们也不用担心会访问其他内存的数值,因为他会自动补充0。看到这里我们对字符串的理解应该已经很深刻那我们再来看看下一个内容。

二.转义字符

1.为什么会有转义字符?

我们先来聊聊为什么会有转义字符这个东西,比如说有一天我这个人无聊我像打印一个”,于是我就试试在这里插入图片描述
这时候我们发现压根就打印不出来为什么呢?因为当第一个双引号出来的时候,他会与最近的双引号进行配对,所以这时候就会孤立出一个双引号,这时候我们发现我们想要打印的东西没有打印出来,而且还多出来了一个双引号呢?这时候我们我们怎么办呢?我们想一下如果我们能把第二个双引号的作用取消把他变成另一个意思(当然这里的意思就是啥意思没有就是一个普普通通的字符),那这个第一个双引号就会和第三个双引号进行配对于是我们就可以打印出来这个双引号。于是这里就出现了转义字符这个东西。在这里插入图片描述

2.转义字符的例子

何为转义字符呢?转义字符就是转变字符的意思的字符,我们先来看个例子我们先试着打印两句话abcden,和abcde\n我们来看看这个这两个的结果在这里插入图片描述在这里插入图片描述
大家可以对比一下这两段代码的运行结果,我们可以清楚的发现第二章图片中的n似乎没有打印出来,并且有更加细心的同学可能发现了这第二章图片似乎空了一句这是什么原因呢?这便是我们这里要说的转义字符,我们再来看一个例子,有一天我突然感觉吃的太饱了,我想看一下能不能打印出\这个东西,在这里插入图片描述
于是我们就发现打印不出来,我们就看了看报错的原因,说缺少了右引号,但是我们这里我们看到的是有的啊,于是大家就想到了我上面讲的,哦原来这个\把那个右引号转义了,那我们现在该怎么办呢?既然你转义了双引号,那我再来一个\来转义那个转义双引号的\不就欧克了嘛我们来试试。在这里插入图片描述
结果跟我们预测的一模一样,当然这里应该还可以玩一下俄罗斯套娃,但是没必要哈!看到这里想必大家对这个转义字符的作用已经很明白了,他就是来改变其他符号的意思的东西那我们来看看c语言中有哪些转义字符。

3.具体有那些转义字符

\?在书写多个问号时,防止他们被解析成三字母词
\’用于表示字符串常量’
\“用于表示字符穿内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂蜜
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制数字。如\130为X
\xdddd表示两个十六进制数字,如\x30为 0

4.转义字符的作用

一.\?的作用
在早期的编译器中有个东西叫三字母词,当然现在有些编译器可能没有了,那这是一个什么东西呢?比如说我想打印一段话为(are you ok??),我们人类看到这段话感觉好好的,没有什么大的问题但是在早期的编译器看到这句话,他会把最后面的??)认为是一个三字母词把??)转化为]所以在早期的编译器,这段话打印出来的效果为(are you ok] ,所以我们这里就会出现按\?这样的转义字符,防止电脑将??)被理解为]。
二.’
这个我前面讲了这里就不多赘述,就是表示字符常量’。
三."
这个我前面也讲了这里就不多叭叭了,就是用于表示一个字符串内部的双引号
四.\
用于表示一个反斜杠,,防止他被解释为一个转义序列符。
五.\a
这是一个警告字符,蜂鸣。这是啥意思呢?大家可以点开自己电脑的扬声器,然后用鼠标推动声音的大小这时候电脑就会发出一个声音,这个声音就是蜂鸣声,那这个怎么使用呢?大家可以试试printf("\a");然后开大声音,应该就可以听到声音。
六.\b
这个为退格符,不是很重要哈,了解即可。
七.\f
这个为进纸符。
八.\n
这个为换行,大家看到这个应该很熟悉,我们之前的printf函数里面的内容最后都带了一个\n
九.\r
这个表示回车的意思。
十.\t
这个表示的是水平制表符。那水平制表符的意思是啥呢?我们在c语言的编译器里面打字的时候我们按空格是不是只能空出一格,但是我们按一个Tab却可以空出一大格,我们把这个一大格就称为水平制表符。
十一.\v
这个表示为垂直制表符,这个可以不用理解哈。
十二.\ddd
这个的意思是斜杠后面的1~3个数值是八进制,我们把这些数值转化为十进制的数值,并转化为Ascall值所表达的值输出。那这是什么意思呢?我们举个例子就知道了,比如说\130,这个130是八进制的,我们首先将其转化为十进制,这个转化过程就是0×8的0次方+3×8的1次方+1×8的二次方结果为88,那我们在查看那个表就可以得知88对应的为X,那我们这里的\130的意思就是X的意思。当然我们这里要注意的一点就是这个ddd的三个数转化为十进制的时候大小不能超过ascall码的大小。这里大家可以在百度上面搜搜ascall表然后自己看看哈。
十三.\xdd
其实这个意思与上面的意思相差不大,只是我们这里的两个dd表示的是十六进制,与上面一样把这个转化为10进制数值再对应到ascall值所代表的值。我们举个例子如\x30为这里的意思就是表示为字符0。

5.一道小小的例题

相比看到这里大家对转义字符应该有一定的理解了我们来看一道例题来加深理解 。

#include<stdio.h>
#include<string.h>
int main()
{
	printf("%d",strlen("c:\test\628\test.c"));
	return 0;
}

大家看到这个题,可能会给出不同的答案,我们先来分析一下我们看到了\就想到了转义字符,那我们就看看有哪些转义字符呢?我们看到了有两个\t,还有一个\62所以一共有三个转义字符,啊这时候就有小伙伴们就要说了,啊这个应该是\628啊,这后面应该跟三个数字啊,同学你看好哈我们这个后面跟的是八进制数字,你的8是八进制吗?对吧!当然有同学还要说啊这个\t他的长读是空格的四倍啊(这里我们解释一下我们在求字符串长度的时候一个空格也算作一个长度比如abcd ef这里的长度就应该为7而不是六)所以一个\t的长度应该为四啊,咋就为一了啊?这里我们就要解释一下了我们一个\t他是算作一个字符,但是他的输出效果算作四个字符,对吧我们这里看的是本身而不是其输出效果,如果我的\t算四个的话,那我的\n算多少呢?对吧。

三.注释

这个内容比较简单,只有一个知识点是需要我们大家注意一下的。我们在写代码的时候一般都会在代码后面加一些注释,因为我们以后在做项目的时候,我们是多人合作的,可能你很厉害写了很多非常牛叉的代码,但是这些代码在你的脑里十分的简单,但是对于其他人来说却很难所以我们在代码旁边一般会加一些注释文字,来帮助其他人读懂。或者我们在写代码的时候会出现这一大段代码我不需要了我们也可以用注释的方式将其删掉。

1.c语言的注释方式

我们c语言有一种注释方式/*xxxxxxxxx*/我们来举个例子就可以知道
在这里插入图片描述
这就是我们删掉一段代码的例子,但是我们这里有个有点就是我们一下子就可以删除一大段的代码,但是这里有个缺点就是不能嵌套使用比如说!在这里插入图片描述
我们写了一段代码想删除中间这两个a.b变量,我们可以很轻松的使用c语言的注释方式将其删除,但是过了一会我有感觉这一大段代码我都不想要来我想全部删除,那么这是我们就会出现差错我们来看在这里插入图片描述
我们发现ab上面的代码被我们删掉了,但是下面的代码似乎并没有删掉,这是为什么呢?因为我们这个注释方法中/*会与最近的*/进行配对,所以这里最下面的*/也就不会执行,所以我们ab变量下面的代码也就不会被删除。这就是我们c语言注释方法的一种缺陷。

2.c++的注释方式

相比于c语言的注释方式,我觉得c++的注释方式更加的好用,我们在你想注释的代码前面加个//就可以,但是这种注释方法在面对删除大数量代码的时候得每段前面都添加,如果想要添加注释的话只用在注释前面添加//就可以了,我们来看个例子
在这里插入图片描述
啊这里确实没啥难理解的,大家看看例子就可以理解,这里有个便捷方式就是如何快速删除代码,大家只需选择你想要注释掉的一大段代码,然后点击在这里插入图片描述
这个就可以快速的添加注释。

四.选择语句

由于我们这一章我们叫初识c语言,所以我们这里的目的是让小伙伴们了解即可,所以这里我们就大致的讲一下,等我们初识c语言讲完之后,我们c语言入门会给大家来详细讲解,这个问题这里大家了解即可。好我们来看看这章的内容,选择语句这个大家应该通过字面意思便能够明白其中的道理,因为我们生活中到处都存在着选择的地方比如说:我们初中的时候很多青少年都存在叛逆期这个时期,在那个时候我们很多人都面临着选择这个东西,有些人选择听老师的话好好读书,好好学习然后他们就会去好的高中之后也很顺利的去了一个好的大学,但是有些人却没有这么做他们选着玩物丧志,喜欢跟着社会上面的人鬼混,结果没有考试一个好的高中,或者根本没考起高中,我就是后者,所以我就很后悔当时的选择,但是好在后面努力一把,现在的学校还可以,啊我们话说回来我们生活中存在着选择语句,那我们在c语言中是如何来描述这个选择语句的呢?这里我们就要讲讲if语句了我们先来看个例子我们先想想一个场景,我们早上吃早饭我们就会打开那扁平的钱包,如果我们钱包里面的钱小于5元我就只能回家吃白水煮挂面,如果我们的钱包里面的钱大于等于5元,我们就会选择买碗武汉热干面,那么这就是一个选择语句,那我们c语言里面是怎么来描述的呢?我们就来看看if语句的结构这里我们只有两个选择所以我们就采用以下的形式在这里插入图片描述
if后面的括号里面是表达式,里面装的内容就是类似于我们的钱包里面的钱的多少,而下面的大括号里面的语句1,和语句2装的内容就是我们所说的买热干面还是回家吃白水煮挂面那我们用代码是怎么实现的呢?

#include<stdio.h>
int main()
{
	int a = 0;
	printf("请输入你口袋里面有多少钱");
	scanf("%d", &a);
	if (a <= 4)
	{
		printf("只能在家里吃白水煮挂面");
	}
	else
	{
		printf("可以买碗武汉热干面");
	}
	return 0;
}

if后面括号的内容对应的结果为真,则就会执行这个大括号里面语句的内容,如果括号的内容为假,则不会执行这个内容,则会直接执行else里面的大括号里面的内容,大家可以对应一下这段代码,改一下条件和内容,当然这里我要提醒大家一点就是,我们这个判断变量是否等于一个值的时候用的是==而不是=哈这个后面会讲,因为=这个是赋值的意思如果我们把第一个表达式改成(a=4)的话我们会发现不论我们取得值是多少都只会执行第一段语句,因为这里赋值后a就等于4,0而我们知道0表示假非零表示真,而我们这里永远都是4,所以永远都是真,所以就永远只会执行这个第一个语句。这里大家要注意一下哈。其实大家看到这里可能会发现一个问题我们这个结构似乎只能执行两个情况吧,那我要是想执行三个情况呢?这怎么办呢?比如说我们讲年龄分类年龄小于18岁我们称为未成年,大于18岁小于60岁我们称为中年人,大于60岁我们称为老年人。那这个我们就要介绍一个else if了我们在if和else里面添加一个else if就可以用来表示三个情况
在这里插入图片描述
相必大家看懂第一个两种情况的话看这个应该是能看的懂的,我们就把上面的例子实现一下。

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
	else if (age >= 18 && age < 60)
	{
		printf("成年人\n");
	}
	else
	{
		printf("老年人\n");
	}
	return 0;

大家可以改改内容改改条件啥的,啊这时候肯定会说要是我还有其他的条件呢?不止三个呢?有6个或者更多呢?有多少个条件就加条件的数目减二的个数的else if上去只用保证一个是if最后一个为else就行。
在这里插入图片描述
但是这里大家需要明白的一点就是,如果这么多的条件中,只要有一个条件判定为真,则这个条件下面的条件都不会执行,比如语句3被执行了,则下面的语句4 5 6 直接跳过不会判断也不会执行大家明白即可,毕竟老婆没有可以,但是不能有两个,一夫一妻制嘛。好这里我们讲完了if语句,我们还有个switch语句也可以用来判断,但是我们这里先不讲哈,因为我们是初识c语言我们后面的c语言入门再来讲解,大概就是下下章的内容。

五.循环语句

这个我相信大家应该通过这个就能够明白这个语句的作用,和意思比如我们之前高考不停的听课刷题和考试最后一战出名,这就是一个循环,比如说我们平日减肥天天跑步然后瘦了50斤就不减了(啊哈为什么我要说这个呢?因为我就减了这么多斤)这都是循环,那我们c语言怎么用这个来表达呢?这就得说说我们的while循环,for循环,do…while循环这里我们就讲讲while循环,后面两个不是不重要是我们后面会讲,这里我们就了解了解即可。那我们就来看看while循环,我们拿减肥来举个栗子一开始我们的体重为220斤,后来经过我们的不断的锻炼每天跑步7公里达到了每天减重一斤的效果,等我们的体重到160斤我们就不减了,那我们怎么用c语言来表示这个呢这个怎么来表示呢?这里我们就来看看while循环怎么用哈,在这里插入图片描述
while后面的括号里面是表达式也可以叫做判断语句,表达式的运行结果为真,那么就会执行下面的循环语句,循环语句运行完后,一般来说会对表达式进行改变,这时候我们再来判断表达式是否成立,如果成立则会再执行一次下面的循环语句,不成立则跳出这个while循环,那这是就有小伙伴表示不理解了,啥叫表达式会改变啊,好那我们这里就来举个简单的例子

int i=1while(i<10)
{
	printf("好好学习,不负韶华。");
	i++;
}

我们来看这个例子,我们这个循环语句里面有个i++,这个的意思是每执行一次,i的值就会+1。那我们一开始的i=1,我们就会进入表达式进行判断,i<10判断的结果为真,所以我们会执行这个循环语句,执行完后,我的i是不是就变成了2,并且打印出好好学习,不负韶华这句话,那我们这时候循环语句就执行完了,那么就会再进行一次判断的过程,但是我们需要注意的一点就是我的表达式发生了改变一开始的i=1,而我们这里的i=2,表达式发生了改变,但是判断的结果依然为真,是真的话我们就会继续再执行循环语句,执行完了之后我的i又会发生改变,i发生了改变,我的表达式也要发生改变,就会这样的不断的循环下去,直到我的表示式判断为假就不再循环下去,那我们这里的结束的标志是什么呢?是不是就是i=10啊对吧,如果i等于10的话这里就会判断为假我们这里就会跳出循环。想必大家应该明白了while循环的判断与结束的标志,那我们这里如何来表示减肥这个例子呢?我们想想我们的表达式是什么?什么是我这个循环结束的标志,那么很显然当我体重为160斤的时候是不是就不用减肥了,那么我们这里的结束的标志是不是就是weight<160这是我结束的标志,那我的循环语句是什么呢?是不是就是锻炼一次瘦一斤啊。我们定义一个初始的体重,没执行一次循环语句我的初始体重就会-1,我们有了表达式也有了结束标志那我们写这个代码是不是就很容易了啊!``

#include <stdio.h>
int main()
{
	int weight = 220;
	int day = 0;
	printf("我要开始减肥了\n");
	while (weight >160)
	{
		day++;
		weight--;
		printf("减肥第%d天的体重为%d斤\n", day, weight);
		
	}
	printf("体重终于到160了,不减肥了\n")return 0;
}

这就是我们的这个例子的额实现大家可以看看这个这个运行的结果
在这里插入图片描述
是不是跟我们想的一样啊,这里没有出现死循环的状态,也就是有结束的标志。因为我们这里每进行一次循环就会改变表达式,进而离我们结束情况更加的近了一步,就好比我们穿越火线打挑战模式,打boss的时候我们每开一枪boss就会掉一滴血,就算我们boss血一般都多的离谱(没有英雄级武器的情况下),但是只要我们子弹打的多,那么总有一个时刻这个boss会被我们耗死对吧,boss死了就是结束的标志,就相当于跳出了循环。我们这里的weight–;就相当于开了一枪boss掉了血,这个代码去掉你再运行你就会发现请添加图片描述
代码会一直的循环下去,也就相当于你开枪打boss,结果boss不掉血对吧,那你打一个通宵你会发现boss的血条还是绿色的。想必看到这里大家对循环语句有了一定的了解,后面的文章我们还会讲while循环的嵌套使用就是while里面套while,while循环中的break和continue,还有for循环和do while循环这里我们主要是让大家了解即可,更详细的我们后面c语言入门会讲。

六.函数

1.如何理解函数

说到函数,我感觉大家肯定是无比的熟悉了,什么从小到大都在学函数,啥指数函数,对数函数,幂函数,到了大学啥幂指函数等等一大堆函数,那我们c语言中也存在着函数,这时候大家可能就一下子想到不会吧,不会学c语言还要我做函数图像,让我求函数的极值点,拐点,单调性吧,那不会那不会,我们c语言的函数更像是一个工厂,某人提供了一些原材料,这个工厂就会对这些原材料进行加工,然后把新产品还给某人,当然不同的函数就相当于不同的工厂,比如有些工厂你把煤给他,他就能发电,有些工厂你把棉花等纺织物给他,他就能生产一些衣服出来,不同的工厂所需要的原材料不同,他们的机器也就长得不一样,他们所生产出来的东西也就不一样,你啥时候见过火电厂的装置跟服装厂的一样啦!但是这里又有一个情况就是这些厂还得分个类别,我们把一些厂分为别人的和自己的,这就跟我们之前说一样别人的厂你要是想用的话,你是不是得跟别人打一下招呼啊!但是你的商品十分的独特你会发现你想要的商品这些厂都加工不出来,那么这里我们就得自己创建一个工厂来进行加工,我们就把这些函数称为自定义函数。

2.如何来自定义函数

我们就来举一个简单的例子,比如说我们的加法函数我们可以创建一个函数叫add这个函数的功能就是给我两个整形的数字我能把这两个数字的和算出来,这就可以看成一个非常简单的加法函数,那我们加法函数是如何来实现的呢?
第一步:之前我们说过我们用别人函数的时候得跟别人打招呼,那这个人是不是可能不一样啊?有可能是叶超凡,也有可能是叶凡超,那我们在创建自己的函数的时候是不是也得取个名字那我们第一步就是取名字:这里我们取个名字就叫get_add吧。
第二步:我们说过函数是一个工厂,工厂的加工时离不开原材料的,那我们这里的原材料时是怎么送到工厂的呢?这里我们就可以举个非常形象的例子比如get_add(a,b)我们可以把这个大括号和里面的东西看成一个火车,一个火车是不是有很多的车厢,那我们这里的逗号就相当于不同车厢之间连接的东西,那一个车厢里面是不是装着同样的东西,那我们看这里第一个车厢装的是不是a,第二个车厢装的是不是就是b了ab两个车厢使用逗号相连接并且分隔开以免搞混淆了。
第三步:火车到了工厂是不是得有工人将其卸下火车,那么这里就有个问题就是这个火车的地点在哪呢?如果是一个文件的话这个火车得在int main()的前面,在#include的下面,那么火车到了工厂是不是得有工人卸货吧,不同的车厢得有不一样的工人,并且该工人只能负责这一个车厢不能说有些车厢的工人搬的快,他搬完了还能帮别人搬。比如get_add(int x,int y)这里的工人就是x y 并且不同的工人会搬的东西不一样,但是这些工人的记忆力不好,他们总是忘记自己会搬什么,所以你得在工人的前面写上他会搬的类型这就是x 和 y前面的int。这些工人啊会把自己的名字贴在物品上面。
第四步东西搬下来了是不是就得有加工的机器啊那么我们这里就是有具体的装置,并且这些装置得有个围墙围住以免误伤工人那么这里的围墙就是大括号{}工具就是
int z= x+y;因为我们前面说了这些工人会把物品写上自己的名字所以啊这里的x就是名字叫x的物品a实际上还是a,这里的成品就是z。
第五步:我们的物品做出来了,是不是得寄快递给买主,那么我们这里就得有个return z;这个return 就相当于是一个快递,这个快递里面装了一个物品z。
第六步:快递寄出去了是不是就得有一个人来接收这个快递,什么样的人就接受什么样的快递,那么我们就得在这个函数的前面加上这个返回物品的类型,这里的get_add的类型就是int。那么我们这里的函数就说完了具体的实现就是一下的代码

int add(int x, int y)
{
	int z = x + y;
	return z;
}
int main()
{
	int a = 1;
	int b = 2;
	int c=add(a, b);
	printf("%d", c);
	return 0;
}

看到这里想必大家应该能够明白了自定义函数的过程和实现方式但是有时候有些函数的它不一定会返回一个值,比如我们上面的例子我们就可以让其没有返回值,那该怎么办呢?如果一个函数没有返回值的话,我们就把函数前面的类型去掉改成void 没有返回值那么就把return z;去掉我们下面的main函数里面也就只用把函数写上去就够了

void add(int x, int y)
{
	printf("%d", x + y);
}
int main()
{
	int a = 1;
	int b = 2;
	add(a, b);
	
	return 0;
}

这里就是我们要讲的内容,当然函数的内容还有很多我们这里只是了解一下即可我们后面还会详细的讲解。

七.数组

1.为什么会有数组

我们在存储数据的时候,在面对数据比较少的情况下一把都会采用这样的形式,比如说int a = 10;int b = 11;int c = 12;但是我们这样写的话就会出现一个问题,如果有一天我们存储的数据很多呢?比如说我要存的数据为0~100呢?那你还能这么写吗?当然有些小伙伴们可能就会说了可以啊,咋就不行了呀!但是这么写的话太浪费时间了,而且你创建变量的名字也不大好想吧,所以我们就有了数组这么一个东西。

2.如何来定义一个数组

我们c语言中数组的定义是:一组相同类型元素的集合。那我们这里如何来用数组存储数据呢?那我们就来举一个简单的例子,比如说我要存储数字1-10,那我们就可以用到数组这个东西首先我们看类型1到10都是整形,那我们就得创建一个整形的数组,那这个数组总得有个名字吧,于是我们就叫这个数组为abc好吧,当然我一般都喜欢叫arr,或者arr1,arr2,那我们这个数组得有个大小吧,我们这里的要储存的数据为1到10也就是10个数据,那么我们的数组的大小得为10,那我们的数组里面得储存内容吧,我们这里的内容为1到1,看到这里是不是应该能写出如何使用数组来储存数据了int arr[10]={1,2,3,4,5,6,7,8,9,10}我们这里大括号将其围起来,每个数据之间用逗号将其隔开这样我们的数组就创建好了,当然这里有还有个问题就是数组创建好了,那如何来使用呢?

3.数组的使用

这里我们就要提提一个东西叫做数组的下标,我们的数组的下标是从0开始,第一个元素的下标为0,第二个元素的下标为1 ,以此类推也就是说,我们上面的数组1所对应的下标为0,2所对应的下标就为1,3所对应的下标就为2以此类推我们数组中10所对应的下标就是9,那我们在使用数组里面的数据的时候就可以用下标来进行访问,比如说我这个数组创建完了,我想将他们一个一个的打印出来,我们就可以结合我们之前学的到while循环来进行打印

#include<stdio.h>
int main()
{
	int i =0;
	int abc[10] = { 1,2,3,4,5,6,7,8,9,10 };
	while (i < 10)
	{
		printf("%d\n", abc[i]);
		i++;
	}
	return 0;
}

结果当然就是数组中的每个元素都能打印出来
在这里插入图片描述
数组创建好了,数据也储存好了,那如果以后我的数据的内容想要修改这又怎么办呢?其实这里运用到的还是我们数组的下标,我们可以通过下标来访问数组,那同理我们也可以用下标改变数据的内容,我们之前没学数组的时候是如何改变数组的呢?是不是先创建一个变量然后再初始化int a = 10;再直接对a进行修改 a =11;那我们数组不也是一样的吗,在数组里这里的a就变成了arr[n],比如说我们想把上面的数组的内容改成11到20,那是怎么做的呢?我们依然是可以使用循环这个东西

#include<stdio.h>
int main()
{
	int i = 0;
	int x = 11;
	int abc[10] = { 1,2,3,4,5,6,7,8,9,10 };
	while (i < 10)
	{
		abc[i] = x;
		printf("%d\n", abc[i]);
		x++;
		i++;
	}
	return 0;
}

4.几个小的点大家了解一下

第一点
这里就用几点跟大家说一下,就是有时候我们在创建数组的时候,里面的内容没用我预期给的那么多,这是什么意思呢?比如说我们这个代码

int main()
{
	int i = 0;;
	int abc[10] = { 1,2,3,4,5,6,7 };
	while (i < 10)
	{
		printf("%d\n", abc[i]);
		i++;
	}
	return 0;
}

我们创建的数组给他的存储能力是10个整形的数组但是我给他的却只有七个个整形数据,那这剩下的内容会被如何使用呢?难道是直接空在那里吗?当然不会,我们编译器会把剩下的空间直接补上0,比如说上一段代码我们运行一下便可以发现
在这里插入图片描述
剩下的地方被补上了0当然有小伙伴们可能还不信,我们这里可以再用监视这个功能呢看看我们这个数组的内部结果一模一样哈!请添加图片描述

第二点
我们在讲字符串的时候讲过,我们用数组来存储字符串,其中一种方法要是没有\0的话会出现越界访问,会访问其他内存的数据等等,但是大家要注意的一点的就是我们当时讲的是用字符类型的数组来存储字符,我们这里是整形的数组,所以大家要明白哈,数组也是要分总类的哈,我们整形的数组不需要担心有没有\0这件事。

八.总结

看到这里我们这篇文章也就结束了,感谢各位小伙伴们的耐心观看,这篇文章我们初步学习到了字符串,转义字符,c语言的注释方法,选择语句,循环语句,函数,以及数组,看到这里想必大家有了一个初步的了解,大家可以多去尝试尝试,我们下一篇文章会继续带大家初步了解操作符,常见的关键字,#define定义的常量和宏,指针,结构体,感谢大家的观看,有问题欢迎指出,谢谢大家,我们下周见,我会尽量保持一周一更。下一篇文章应该是最后一个初始c语言的文章了,这个文章讲完了,就会进入到详解c语言的内容。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶超凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值