416.。。课后总结-程序员宅基地

老师上课所讲的内容,上传,为以后复习用。

C语言基本的几大模块:
数据类型
运算符
三种结构顺序:顺序、选择、循环
函数
数组
指针
结构体、共同体、枚举


函数:
为什么要用函数这个概念?---类比于生活中的写文章;


现在有哪些:
main:从main开始执行,也是在main里面结束,“生命周期”的概念;

生命周期:从出生到死亡的过程;

printf();

函数方面的知识点:函数三要素:定义、声明、调用;


定义:这个是函数关键,是函数的实现部分,实现部分在{},在这里编写实现函数的功能代码;


声明:其实应该说函数原型的声明,什么是原型呢?就是函数的返回值、函数的名字、以及函数的参数列表;
 函数声明告诉我们是别人写好的,我们只知道怎么用就可以了,函数的编写者会告诉你:函数有无返回值或者是函数的返回值是什么、函数功能
 用的时候需要提供哪些参数,什么类型的参数;


调用:调用这个函数的功能呗;




函数参数:
实参:调用函数的时候传进去的参数(值);
形参:函数定义的时候参数列表里面的参数;

怎么传参的呢?
传参不是通过参数的名字进行传递,实参和形参的名字没有半毛钱关系;
传参是按照顺序进行传递的:实参列表里的第一个参数,传递给形参列表里的第一个参数,实参列表里的第二个参数传递个形参列表里的第二个参数,然后以此类推。。。
函数的形参有没有个数没有?----没有,但是参数个数也太多,我见过参数最多的就是5个!
函数传参的过程就是函数调用的过程:将实参拷贝一份传递给形参,既然是拷贝说明只能是形参传递给形参,形参不能传递给实参,也就是单向传递的;
函数被调用之前,形参是不分配内存空间的:程序的执行不是凭空执行的,需要计算机提供一定的资源(CPU和内存),我们的变量就会占用一定的内存;
既然实参占用内存,那么拷贝一份给形参当然也需要内存了;函数的形参分配在栈空间,什么是栈空间呢?计算机自动分配和回收,我们程序员自己不用管!
栈空间是“脏的”,
int a;//编译器分配一段栈空间A,存在的情况是栈空间A之前被编译器分配给其他的变量使用过了,使用之后没有进行必要的清理,所以这个时候再
分配给a,那么保存的还是原来的值;

调用的时候才给形参分配栈空间,函数调用结束之后栈空间自动释放;

注意一点:对应位置的实参和形参的数据类型保持一致;
有时候正确的结果,这是理论上!

我们的例子是传值调用,以后指针可以“传址调用”;---归根到底,传址调用本质上也是传值调用,因为地址也是数值,只不过我们把地址传过去之后,
可以通过地址来改变地址所对应的内存空间里的值;

函数嵌套调用:比如说在fun1函数里,调用fun2函数;


函数递归调用:函数调用自己本身;典型的例子:1*2*3*4.。。。*n


函数的返回值:
为什么需要函数的返回值?
我们函数执行的目的,一:过程;printf("....\n");二:结果

return 数值;

数值要保持函数定义的时候前面的数据类型一致;

int add()
{
float num = 12.34; //分配的栈空间;函数执行结束之后,栈空间就释放;

return num;
//return #
}
返回到函数调用的地方;

调用的时候;得保持现场,你得知道调用过了之后,还得回得来;   分配栈空间,函数执行过了之后还得释放栈空间;


函数的名字:
定义的时候有两个要求:1、合法;2、合理
    合法:定义的要求和定义变量的时候一样;
合理:函数看起来优美,容易理解,通过这个名字就大概可以知道函数的功能,优美看起来舒服呗;


定义函数名字有两种方式:
1、Linux内核的定义方法:int_to_string
2、驼峰式:IntToString


以后进什么公司,公司里怎么定义的你就怎么定义;


函数定义的不要太长太复杂;


模块名_体现函数功能:AD、IIS、Uart
Ad_init();




数组:
1、为什么要学习数组?
总结:有时候需要定义很多变量,如果用一般的定义方式显得麻烦,并且容易出错,所以就引用数组的这个概念;

定义数组和定义一般变量的比较:
没有谁好谁坏,只有适合与不适合;======》什么时候用数组定义?什么时候用一般变量定义?

2、怎么定义数组?
比如:int nun[4]; //数据类型 数组名[常量];  常量:5 3+2;

int add(int n)
{
int num[n]; //不符合C语言标准,建议大家不要这么使用;
}

3、怎么使用数组?
定义的是时候呢,你可以整体定义;但是使用的使用必须一个一个使用:1、通过下标,int num[4];
num[0]:使用数组中第一个元素;
num[1]:使用数组中第二个元素;
以此类推;但是最后一个数组是;int a[N];===>a[N - 1];
非要使用:a[N]; //大家不要越界使用,学习语言语言的时候根据规定来,语言相当于一个使用使用说明书,你是学习它的,不是改变他的;








4、怎么初始化数组?
分为两类:
1、完全初始化:int a[4] = {1,2,3,4};
2、不完全初始化:int a[3] = {33};
a[0] = 33,a[1] = 0; a[2] = 0;
正常分析的话:三种情况:①都是33;②第一个是33,后面的都是0;③11 11 11;

学习方法:学习 = 基础知识 + 合理推断;

没有基础知识,再强的合理推断也没用;
但是即使你有了基础知识作为铺垫,没有合理推断能力,那也是死记硬背啊!

小结:基础知识和合理推断两者缺一不可;

int a[3] = {}; //a[0] = 0,a[1] = 0,a[2] = 0;
int a[3] = {0}; //跟上面是等价的;
// int a[3]; //没有初始化的;随机值!

第一种:
int a; //定义;
a = 1; //赋值;

第二种:
int a = 1; //初始化===》定义的同时赋值;


int a[3] = {}; //给a[1] = 4;a[0]、a[2]不考虑;
#if 0
int a[3];
a[1] = 4;
#endif
int a[3] = {,4,};

gcc里面特有的:int a[3] = {[1] = 4};

/**** 分析方法和验证方法;  ******/

5、二维数组;
int a[N][M]; //N,M 是常量!

int a[3][4]; //二维数组由3个一维数组组成,然后每个一维数组里面包含了4个元素;
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]

二维数组在内存中的存储方式:按行存放,先放第一行,再放第二行。。。。。依次类推!

引用:a[i][j] = 4; //i代表行,j代表行,i和j都是从0开始!

初始化:int a[3][4] = { {},{},{}};
int a[3][4] = {1,2,3,4,5,6,7.....12};
gcc里面特有的初始化方式:a[1][2] = 5;

a[3][4] = {[1][2] = 5}; //可以的;
// a[3][4] = {};




6、字符数组:
为什么要单独提出来讲呢?
char ch[4] = {'a','b'..};

char ch[] = {"HelloWorld"};
char ch[11] = {"HelloWorld"};

字符串的结尾标志是'\0';
遍历字符串的时候,遍历是'\0'默认为字符串结束了,然后'\0'前面的字符就是字符串的内容;
输入字符串的时候:hello  系统会自动在o后面加上一个'\0'表示字符串结束;
‘\0’占存储空间的;

sizeof(ch);  //11,加'\0',毕竟'\0'占存储空间的;
strlen(ch); //10,因为'\0'表示字符串结束,字符串的真正内容是'\0'前面的字符,当然不算'\0';
‘\0’是个什么玩意呢? ASCII表---'\0'==>0   什么都不显示!

int a[5] = {1,2,3,4,5};
sizeof(a); ///定义了整型数组,然后数组元素是5个,每一个整型数所占字节是4个字节,那么5个呢:4*5 = 20;
sizeof(a)/sizeof(a[0]);//实现什么功能?数组个数!

数组里面的数据类型都是一样的啊,不是说可以2个int和3个float!!!!


数组的基本应用:

1、冒泡排序:




2、选择排序:


是排序中最简单的,也是笔试题考的比较多的,所以单独讲一下,要求必须掌握!


编译预处理:


1、宏定义:
不带参数: #define MAX 100
带参数的宏定义: #define S(a) a*a //宏函数;
“”里的内容不替换;
带参的宏定义最好加上();
举个例子:S(a) a*a     S和(之间没有空格

带参的宏定义称为宏函数:

笔试题和面试题:
宏函数和自定义函数的区别:
1、宏函数在预处理阶段进行替换,自定义函数是在编译期间进行处理;
2、宏函数没有类型,自定义函数有类型;
3、因为宏函数只是进行简单的替换,自定义函数调用的时候还得分配栈空间、保存现场,所以宏函数执行效率比自定义函数高;
4、也是因为只是进行简单的替换,所以不进行语法检查,自定义函数进行语法检查;

既然宏函数执行效率高,而自定义函数进行语法检查,各有优点;

内联函数:inline

内置宏:
两个下划线连起来的!


typedef:不是在预编译处理阶段处理的;

2、头文件包含:#include <stdio.h>
#include "stdio.h"
区别要知道,要不然就是个假的程序员;


3、条件编译:
#if 宏名
...
#elif
....
#endif

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/big_big_white/article/details/70213999

智能推荐

键盘的介绍_键盘的简介csdn-程序员宅基地

文章浏览阅读206次。Ctrl键:控制键 通常与其它字母键组合使用,Ctrl + C复制/ Ctrl + V粘贴/ Ctrl + X剪切/ Ctrl + A全选/ Ctrl + S保存/ Ctrl + Z返回上一步/ Ctrl + N新建/ Ctrl + O打开等。按下此键为改写状态,输入的字符将会替换掉光标当前所在位置的字符。Delete键:1)删除鼠标光标当前位置右侧的一个字符,且光标右边的所有字符整体向左一定一个字符的位置。右单击输入法指示器,点设置,在弹出的对话框中,单击下拉列表,选择一种中文输入法,点确定。_键盘的简介csdn

YOLOV5---数据集格式转化及训练集和验证集划分_yolov5要求数据格式是什么-程序员宅基地

文章浏览阅读1.9w次,点赞19次,收藏167次。YOLOV5---数据集格式转化及训练集和验证集划分VOC标签格式转yolo格式并划分训练集和测试集标签为yolo格式数据集划分训练集和验证集VOC标签格式转yolo格式并划分训练集和测试集yolov5训练所需要的文件格式是txt格式的,基于labelimage标注的格式有VOC(xml格式),同时训练自己的yolov5检测模型的时候,数据集需要划分为训练集和验证集。本文基于python,实现了将xml格式的标签文件转换为txt文件,同时按比例划分为训练集和验证集的功能。import xml.etr_yolov5要求数据格式是什么

python爬虫之scrapy_192.168.30.00:8888-程序员宅基地

文章浏览阅读6k次,点赞5次,收藏21次。scrapy安装在windows下,在dos中运行pip install Scrapy报错采用pip安装,安装时可能会出现安装错误Microsoft Visual C++ 14.0 is required,解决方案http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载twisted对应版本的whl文件(如我的Twisted‑1..._192.168.30.00:8888

Oracle技术之和外键相关的阻塞和死锁问题总结(四)-程序员宅基地

文章浏览阅读96次。session 2:SQL> delete from p where id=3; 已删除 1 行。SQL>--====================session 3:SQL> select sid,type,id1,id2,lmode,request,ctime,block from v$lock where sid in2 (159,128) orde..._oracle外键 死锁

天天团购系统--部分模板语法-程序员宅基地

文章浏览阅读86次。模板都放在templates目录下,默认是 templates /default目录是大部份模板,后台模板就相应在 templates /admin, templates/html下是一些模块代码需要生成的html模板,例如 填写收货地址页面的,点击添加地址后,弹出来的一个填写地址的层。header、footer、detail(内容页),deals(往期团购)等,然 而主..._templates/default/js/

省二计算机二级vb程序设计题,2018年3月计算机二级考试VB语言程序设计试题-程序员宅基地

文章浏览阅读124次。(21)窗体上有一个文本框,用于接收正整数。为保证输入数据的合法性  (即正整数),可以在该数据输入结束后准备继续其他操作时进行数据的合法性检查。为实现上述目的,应选用的事件是(22)设有如下程序:Private Sub Command1_Click()Dim a(10) As IntegerDim i As Integer, n As Integern = 6For i = 1 To na(i)..._编写以下程序,程序运行后,如果单击命令按钮,则输出结果为 。sub proc(x as si

随便推点

realmeQ3 Pro狂欢版和GT Neo闪速版有什么区别_realme gt neo闪速版开机后是黑白色如何恢复彩色-程序员宅基地

文章浏览阅读2.9w次。真我Q3 Pro主要提升了颜值以及自拍性能。realme真我Q3 Pro共配备了天空之城、黑巧森林两款时尚的配色,而且机身仅有174g的重量以及7.9mm厚度,手感更为舒适,依旧配备了4500mAh大容量电池,可能是同价位最轻薄的手机。选realmeQ3 Pro狂欢版还是GT Neo闪速版这些点很重要看过你就懂了http:// realme.adiannao.cn/7真我Q3 Pro狂欢版手机非常轻薄,但是在电池方面却没有妥协,依旧配备了4500mAh大容量电池,同时配备了50W智慧闪充,14分钟充至50_realme gt neo闪速版开机后是黑白色如何恢复彩色

Redis 6 redis-cluster-proxy 集群代理使用-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏7次。redis-cluster-proxy_redis-cluster-proxy

Vue项目中引用‘阿里巴巴字体图标库iconfont’_iconfont下载的代码与官网不一样-程序员宅基地

文章浏览阅读2.4k次,点赞48次,收藏92次。1.前言在实际开发中,作为前端开发人员的我们经常会遇到下面这种ui图我们看到在上面两个平台设计图中的出现了大量的图标,在某种情况下,这种图标是需要我们自己去找的,不要喷我们的 ui 哈,主要是我喜欢麻烦 哈哈,如果ui提供我也是要求他为我们提供SVG格式的,至于为什么 下面会为大家讲解。在这里呢我们遇到这种图标可能会想到我们运用的框架中的字体图标,像element-ui、iview-ui中都提供了icon图标上面的两个ui框架中都提供了很多图标我们至于要直接运用即可,但是在我们的开发需求中很多_iconfont下载的代码与官网不一样

python显示图片并让用户框选_matplotlib选择图像的框区域,然后放大-程序员宅基地

文章浏览阅读791次。使用opencv从网络摄像头获取帧,然后进行绘图。我在图的中心画一个矩形,然后得到选定的区域并显示在另一个绘图中(通过插值放大)import matplotlib.pyplot as pltimport matplotlib.animation as animationimport cv2boxSize = 150enlargeBy = 3def getBoxCoordinates(cap, si..._py打开图片动态框选

2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题解题思路_2023mathorcuo大数据初赛b题思路-程序员宅基地

文章浏览阅读2.5k次。还有一部分为数据编码处理,即对于商家编码为例,我们需要对这些变为数据进行后续处理,这里就需要大家设置数据标码方式,通常默认的方式,就是依次进行标码,如下所示。但是,这种逻辑异常的难点在于无法直接看出具体是,需要大家仔细查找,或者设置find函数的约束,进行查找,较为复杂。引入,大型促销下的商家+仓库+商品维度相关数据,与问题二思路相似,根据引入的数据利用分类模型,得出新的分类结果。利用问题一建立的分类模型,引入问题二附件五的数据进行重新分类判定,采用尽量采用问题一相同的预测模型,进行预测即可。_2023mathorcuo大数据初赛b题思路

回溯法经典例题(四):java解批处理作业调度_批处理作业调度(回溯法)java-程序员宅基地

文章浏览阅读1.4k次。批处理作业调度问题描述每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和算法分析定义解空间确定解空间结构剪枝函数..._批处理作业调度(回溯法)java

推荐文章

热门文章

相关标签