栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初识C语言(下)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初识C语言(下)

前言

因为作者是刚接触编程,所写内容一定有错误或不足之处,希望各位大牛在阅读后能够及时指出,并且给出相应建议,赠人玫瑰,手有余香。感谢各位大牛的阅读和指正。

目录

一、选择语句

二、循环语句

三、函数

四、数组

五、操作符

六、常见关键字 

七、指针

八、结构体


一、选择语句

C语言在解决实际生活的过程中,会遇到一些选择性问题,这个时候就需要C语言能够编写一段有选择功能的程序。因为此篇幅只是初识C语言,所以只是简短的介绍if语句。

描述问题如下:首先提问是否好好学习编程?如果回答是,那么就会输出拿到好offer,如果不是,那会输出卖红薯。代码如下

 我们逐步分析一下这段代码,首先还是最基本的主函数main函数,进入主函数内部,首先需要打印出来是否好好学编程这句话,所以引用printf函数,引用的同时要注意printf是库函数所以要有头函数(stido.h),因为要输入0或者是1来判别是否好好学习编程所以引用scanf输出函数,同时定义一个整型变量a用于存放输入的0或者是1。接下来就是我们的选择部分,if语句中如果a取值0那么会打印拿到好offer,如果a取值1那么就回家卖红薯。这里我们需要注意,if括号内是a==0而不是a=0。在C语言中a = 0代表着给a赋值0,而a == 0代表着判断。

从这两段代码可以看出if后面一个是a == 20 一个是a=20,因为int a = 0是将0赋值给a,第一段代码意思是如果判断a为20则打印呵呵但此时a为0所以没有打印出来。第二段代码a = 20恒为真所以就打印了出来。 

二、循环语句

在生活中也有一些问题是需要我们循环再循环的进行,所以也就有了循环语句。循环语句常见的有while循环,for循环,dowhile循环。在这一章只是介绍一下while循环,点到为止。

学习是一个重复的过程,所以要重复的练习代码,只有敲出50000行代码才能初出茅庐。接下来就用while循环来描述一个程序。

 这段代码要描述只有写出50000行代码才能略有成效,首先用while循环,只要line小于50000行那么就一直循环,只有line>=50000行时才能跳出循环。在循环内部还有达到一个条件,每完成一次循环都要增加一行,所以要line++。

三、函数

函数可以想象成一个工厂,原材料就是你想要输入的值,而工厂便是这个函数,输入的值经过函数的封装,便会产出你想要的东西。之前的文章写过两个数求和的程序,我们这次用函数来描述两个数求和。

首先还是先从main函数开始运行定义两个整型变量用于存放两个需要输入的数值,再定义sum用于存放求和结果,之前的代码是sum=num1+num2,现在改用函数的形式用Add代替了 sum=num1+num2,但是这个Add是什么呢?我们不能凭空出来,否则编译器会报错。我们需要对我们定义的Add函数进行说明,说明Add函数的类型(int),参数(intx,inty),和最后的返回值return z。

函数的特点就是代码简化,代码复用,当今后代码数量多的时候,再需要求和就可以直接调用Add函数进行求和,无需再编写代码。

四、数组

C语言中给了数组的定义:一类相同元素的集合。

如果我们想要定义3个数字,我么也许会这样int a = 0   int b = 0;   int c = 0;但是如果要定义10个甚至上百个数字,我们就需要用数组来定义。比如我们需要定义从1-10采用数组的形式就是

int arr[10] = {1,2,3,4,5,6,7,8,9,10}方括号内需要是一个常量用于描述数组内的个数,花括号内便是各个元素。

值得注意的是,C语言规定:数组的每个元素都有一个下标,下标是从0开始的,并且数组可以通过下标来访问。

可以看出arr[0]代表的是第一个元素0,后面的以此类推。

五、操作符

C语言之所以说是底层的语言,是因为他有很多操作符,可以直接操作内存数据,甚至可以操作二进制位。

+ - *这三个操作符比较简单,需要解释的是/和% 

从代码中可以看出/是取商,%是取余 

移位操作符所说的移位,是指移动二进制位,3作为一个1 进制数字转化为二进制为

 00000000 00000000 00000000 00000011进行移位的时候最前面的0就没了最后面的1进1位并且后面补0。移位后的二进制为 00000000 00000000 00000000 00000110转化为十进制为1*2^2+1*2^1+0=6所以打印出来的数值为6。

&是按位与 ^是按位异或 | 是按位或这三个都是改变二进制序列,

按位与意思是对于二进制序列,两个数都为1计算结果才是1,只要有一个是0,计算结果便是0。

3&5的计算结果是00000000 00000000 00000000 000000001输出结果为1

 ^是按位异或,相对应的二进制序列相同为0,不同为1。

3^5的二进制结果为00000000 00000000 00000000 0000110对应的10进制数字为6

|是按位或 二进制序列有1便是1

 3|5的二进制结果为00000000000000000000000000000111

 

操作符还有赋值操作符 

想要描述a = a+4就可以写成a+=4;其他同理。

 单目操作符需要解释的是++和--,这两个符号有着前置和后置的差异当为前置++时是先++后使用,当为后置++时是先使用,后++。--同理,我们用两个代码来更深层次的理解。

前置++先++后使用要打印a和b因为是前置++所以先++说明此时a为11再将a赋值给b也为11

 后置++先使用后++,先将a赋值给b此时b为10再将a++ a为11

六、常见关键字 

 

以上是常用的关键字在这里主要说一下关键字static

 首先先介绍一下计算机内存大概是个什么样子的?内存是一个比较大的存储空间,在使用内存时会划分不同的功能区域

                                                  

 在学习编程语言的时候,我们的内存主要考虑栈区,堆区,静态区。局部变量一般存放于栈区,全局变量存放于静态区。知道这一点后我们再看关键字static。

当static修饰局部变量时

我们在while循环中调用test函数,每调用一次函数i都要+1,一共循环十次才能跳出循环而test函数时打印整型变量a,并且打印完之后a+1那么结合while循环,大家可能会想打印十次a的数值,而且a要+1那么最终打印结果是0-9。其实不然,我们通过程序看到打印结果是10个0这是因为变量a是一个局部变量 ,他的生命周期只在他的作用域内有效,当出了作用域便会销毁,所以每次调用test函数都是从0开始调用,一出作用域便销毁,所以打印10个0。

当用static修饰的时候,其实改变了变量的存储类型,将局部变量从栈区存储变换为静态区,从而使得静态的局部变量出了自己的作用域也不会销毁,相当于改变了这个局部变量的生命周期。

当static修饰全局变量时

 

 

我们在一个工程中创建两个文件,其中一个文件打印a,而a的定义是在另一个文件中,在调用时需要用extern声明一下,我们发现即使a不在同一个文件里,依然可以调用。

当用static修饰的时候,发现文件2中的a没有办法调用给文件1中 。这是因为,一个全局变量在整个工程的其他文件内部能够被使用是因为全局变量具有外部链接属性,当一个全局变量被static修饰的时候,这个变量的外部链接属性就变成了内部链接属性,使得这个全局变量只能在自己所在的源文件内部使用,给我们的感觉就是作用域变小了。

七、指针

指针就是地址,地址就是指针,我们在定义一个变量的时候都需要在内存中开辟一个空间

 我们定一个整型变量a int类型占四个字节,所以蓝色部分存放的都是10,内存中的编号也就是地址,在取地址的时候,会取第一个地址,我们可以通过指针(地址)寻找到需要的变量。*说明p是一个指针变量,int说明指针变量是一个指向整型的变量。指针可以表示出我们所需要元素的位置并且找到他,而且通过解引用操作符可以改变变量的值,也就是说*p就是a。

指针变量的大小

我们可以看到指针变量的大小有8个字节和4个字节,这是为什么呢?是因为我们的计算机分为32位机器和64位机器。我们的内存中的编号便是地址,32位机器代表着有32根物理地址线,通电后会产生高电平和低电平转化为数字信号便是0和1,也就是说当我们的机器是32位时,我们的地址是一个由32个0,1组成的二进制序列,而每一个二进制(0或1)就是一个比特位,32个0或1便是32个bit,8个bit是一个byte,所以 一个地址编号有4个byte,一个指针变量指向一个地址,所以一个指针变量的大小便是4byte,也就是用sizeof打印出来的4。

那么8byte我们可以举一反三,是64位机器的指针变量大小,64位机器中一个地址就是64个bit,也就是8byte,所以在64位机器中,用sizeof打印指针变量的大小便是8。

八、结构体

我们用C语言解决日常生活问题的时候,不仅仅会需要我们描述简单问题,如定义一个年龄等,如果需要我们描述一个人,人是一个复杂事情,需要我们将他的年龄,姓名,性别都描述出来,这个时候我们就需要借用结构体来描述。

如,我们需要描述一个人的姓名,年龄,性别。

首先我们要定义结构体,结构体的成员有name age sex,并且要定义相应的数据类型。在主函数中创建结构体,并且将他初始化,格式就是语法要求,记住即可。最后打印出结构体的数据。

同理,我们也可以用指针的概念,将zhangsan的地址给指针变量pl,通过解引用操作符*来控制zhangsan中的初始化内容。 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号