IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 跟“龙哥”学C语言编程day3 -> 正文阅读

[C++知识库]跟“龙哥”学C语言编程day3

选择与循环

关系表达式与逻辑表达式

算术运算符优先级高于关系运算符,关系运算符的优先级高于逻辑与和逻辑或

if语句

在这里插入图片描述
使用if嵌套语句时,要考虑“悬空的else“问题。C语言中的else子句从属于最靠近它的不完整的if语句。
在if语句中的语句列表前后加上花括号 ,可以防止错误。

switch

判断的一个变量可以等于几个值或几十个值,使用if会导致分支太多,这时可以考虑switch。
switch(表达式){
case 常量表达式1:语句1
case 常量表达式2:语句2

default:语句n+1
}
当匹配到一个时,一下不会再匹配,直接执行下面的语句。所以需要在每条语句后面加上break;
switch里的表达式只能是 整型表达式或字符型表达式。

goto语句

goto语句对应着jmp跳转,体现了循环结构的本质。
C中的while,do while,for循环在程序编译时,都要拆解成汇编语言的jmp跳转。goto语句也被称为无条件转向语句。
goto语句的使用场景分为两种:一种是向上跳转实现循环,另一种是向下跳转实现中间的代码不执行。
goto语句必须在一个函数内跳转
语句格式:”goto 语句标号",语句标号的命名规则和变量一样。
代码段内的语句执行,当PC指针指向goto语句时,会让pc指针指到语句标号处实现循环。
在这里插入图片描述

while语句

特点:先判断表达式,后执行语句。
为了避免程序进入死循环,在语句中需要有让表达式趋近于假的操作来使程序跳出循环。

windows下可以用rewind清空缓冲区,但在linux下却不能,解决方法是:
while((ch=getchar())!=EOF&&ch!=’\n’)

do while语句

特点:先执行循环体,后判断循环条件是否成立。

for循环

C语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。
只有分号不能省略,for里面的表达式都可省略

continue语句

continue语句的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行是否执行下一次循环的判断。

break

break语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。

数组

(1)具有相同的数据类型
(2)使用过程中需要保留原始数据
C语言为了方便操作这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合。
一维数组的定义格式为
类型说明符 数组名[常量表达式]
在这里插入图片描述
分配的内存是数组大小*sizeof(数据类型)
数组名和变量命名规则一样
定义数组时,需要指定数组中元素个数,方括号内的常量表达式用来表示元素的个数,即数组长度。
常量表达式中可以包含常量和符号常量,但不能包含变量。C语言不允许对数组大小做动态定义。

一维数组在内存中的存储

定义语句int mark[100],在内存中的存放情况如图

在这里插入图片描述
每个数据元素占用的字节数,就算基类型的字节数一个元素占4字节
在这里插入图片描述因为先定义的变量在内存中放在高地址,后存放的在低地址,又因为数组是往高地址方向增长的,所以数组越界会将原本定义的变量改变它的值,如图变为了8。
变量a与变量i之间的8字节的保护空间已被赋值(微软公司的编译器在不同的变量间设置了保护空间)。

在进行数组作为函数进行传递时,其数组长度时无法传递的,因为在接收的函数的数组的大小变为4字节,因为除了数组外,还需要传递数组长度,实际数组名中存储的是首地址,在void print(int b[],int n);b的括号内填任何东西都是没有意义的,当我们在函数内修改b,其实就是修改与b地址相同的实参,即二者在同一个位置。

栈空间和数组

windows操作系统单个函数的栈空间大小是1MB=1024KB=10 ^20B=1048576B

linux操作系统中单个函数的栈空间为10MB(可修改),数组是定义在栈空间上的,当数组的大小为260000时,就超过了单个函数的栈空间。所以在使用栈空间时,尽量不要使用过大的数组吗,如果需要,那么使用堆空间。

在这里插入图片描述
在main函数的栈空间所保存的a数组的地址是0x00F9FB80 00 00 00 00 …
0x00F9FB84
0x00F9FB88
0x00F9FB8C
0x00F9FB90
0x00F9FB94 .
0x00F9FB98
0x00F9FB9C
0x00F9FBA0
0x00F9FBA4
在这里插入图片描述
当进入print函数时,发现len的地址是0x00CFFA74
我们发现相对于a数组是低地址,所以对于函数的压栈顺序,先是main函数压栈,分配的函数栈内存空间是高地址,而后面压栈的print函数分配的内存空间是低地址。
进入print函数时,main函数的栈空间还存在。当函数执行完调用堆栈就会弹栈,分配的栈空间也会释放。

函数调用是值传递

二维数组

二维数组定义的一般形式
类型说明符 数组名[常量表达式] [常量表达式]
二维数组中的元素在内存中的存储规则是按行存储,即先顺序存储第一行的元素,后顺序存储第二行的元素。

可以用四种方法对二维数组进行初始化
1、int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2、int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3、int a[3][4]={{1},{5},{9}};
4、int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

在这里插入图片描述
一共344=48个字节,按照行存储

在这里插入图片描述
二维数组在传递时,列数一定要写,因为二维数组传递时也是以执政变量形式传递的,列数要与主函数中二维数组a的列数相同。
行不能传递过去,列一定要写,二维数组的首地址传递过去。

字符数组

字符数组 char c[10];
因为C语言规定字符串的结束标志为’\0‘,所以字符数组存储的字符串长度比字符数组少一个字节。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:03:37  更:2021-08-09 10:05:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 16:38:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码