C语言入门Day_25 函数与指针小结

目录

前言:

1.函数

2.指针 

3.易错点

4.思维导图


前言:

 函数就像一个“有魔法的加工盒”,你从入口丢一些原材料进去,它就能加工出一个成品。不同的函数能加工出不同的成品。

入口丢进去的瓶子水和标签就是输入,出口出来的瓶装水就是输出,“有魔法的加工盒”就是函数。 

不同的函数有不同的功能,就像有些“加工盒”加工出来的水是矿泉水,有些“加工盒”加工出来的“水”是果汁。

1.函数

1.1

函数主要分为两大部分:

第一部分是函数定义,第二部分是函数调用

函数的定义主要是约定了函数的使用方式和功能。包括了:返回值,函数名,函数参数和函数体。

函数的调用主要是主干代码对函数的使用,来实现代码的功能,调用通过函数名加函数参数实现。

1.2

我们来重温一下函数的定义和调用:

int AddThree(int num_a)
{  int num_b;  num_b = num_a + 3;   return num_b;
}

1.函数的定义部分

int main()
{    int num_c = 10;    int num_d;   num_d = AddThree(num_c);   printf("%d\n", num_d);
}

2.函数的调用部分

函数名我们鼓励的风格是单词首字母大写,比如AddThreeNumber,不鼓励的风格add_three_number()

1.3

我们学习的函数定义和函数调用,主要针对的是自定义函数的写法。

对于编程语言的内置函数,我们一般只需要了解它的调用方法就可以了。

自定义函数的功能是我们自己定义的,对我们写程序的人来说,它是一个透明的白盒

也就是说,你不仅知道这个函数的功能是什么,也知道函数内部具体的代码细节是什么样子的。

内置函数”是C语言自带的,它是一个不透明的黑盒。也就是说,我们可以直接调用这些函数,但是不用关心函数内部的代码细节。 

1.4

函数机制的设计目的有两个:

第一个是可复用。写一次代码,可重复使用,从而节省写代码的成本;

时间成本也是成本~

第二个是屏蔽功能实现的细节,用户只需要知道输入和输出就可以了,方便组合代码——这种思想叫封装,在后面的代码学习之路上我们还能接着看见。😄

2.指针 

2.1

指针就是内存地址,内存地址就是指针

内存地址是计算机底层的一种数据存储机制,对内存地址的直接操作,等同于对原始数据的直接操作。

因为指针变量本身存储的是一个内存地址,因此我们要获取这个指针指向的变量数据的时候,需要使用指针运算符*

而变量存储的是一个数据,因此我们要获得这个变量数据的内存地址时候,需要使用取地址运算符&

2.2

例如:

int num_a = 1;

1.定义一个整型变量num_a

int num_a = 1;
int *p1;

2.定义一个整型指针p1

nt num_a = 1;
int *p1;
p1 = &num_a;

3.把变量的内存地址赋给指针

int num_a = 1;
int *p1;
p1 = &num_a;
printf("%d\n", *p1);

 

4.打印指针p1指向的数值,1

int num_a = 1;
int *p1;
p1 = &num_a;
printf("%d\n", *p1);
*p1 = 2

5.给指针p1指向的值重新赋值

int num_a = 1;
int *p1;
p1 = &num_a;
printf("%d\n", *p1);
*p1 = 2;
printf("%d\n", *p1);

6.再次打印指针p1指向的数值,2

2.3

指针一旦赋予了某个变量的内存地址,他们就关联起来了,改变任意一方的值,另一方也会随之改变,因为他们共享同一个内存地址。 

同样的道理,我们也可以使用指针来参与各种运算,比如四则运算,比较运算,逻辑运算等等。

 

2.4

同时我们也学习了指针和数组的关系,指针可以指向数组的单个元素的内存地址;

同时指针也可以指向一个数组名,因为数组本质上就是一个指针数组名存储的也是一个内存地址

2.5

 

int num_list[5] = {0, 1, 2, 3, 4};
int *p1;
p1 = &num_list[2];
printf("%d\n", *p1);
p1 = num_list;
printf("%d\n", *p1);

1.指向数组的第三个元素

p1 = &num_list[2];

2.打印数组的第三个元素

printf("%d\n", *p1);

3.把数组名存储的内存地址赋值给p1

p1 = num_list;

4.打印数组的第一个元素

printf("%d\n", *p1);

2.6

当指针指向一个数组元素的时候,它只是和这个数组元素发生了关联,共享了这个数组元素的内存地址

当指针指向一个数组的时候,它和整个数组发生了关联。

由于数组本质上是一个指针,所以*(p+1)num_list[1]是等价的,都指向同一个内存地址

2.7

我们还学习了指针作为函数参数时候的用法,这时候的核心是任何对这个指针参数的修改,都会修改到原来的数据

这是因为当我们使用一般的变量做为函数参数的时候,传入函数的是一个数据的复制品

而我们使用指针作为函数参数的时候,传入函数的是一个内存地址,对内存地址里面的数据进行修改的时候,修改的是原始数据

3.易错点

1.用void关键字定义无返回值函数

2.函数返回值的数据类型,和函数定义里面写的数据类型需要保持一致,否则程序会报错

3.指针指向的是变量的内存地址

4.数组本质上也是一个指针

5.当指针指向整个数组时,不需要到取地址运算符&

但是指针指向数组的某个具体元素时,要用到取地址运算符&

4.思维导图

最后我想说的是:

 在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141953.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【服务端 | Redis】如何使用redis 有序集合实现股票交易的订单表(价格优先、时间优先)

前两天倒腾redis的有序集合时,自己发现了一个问题,redis的有序集合在score相同的情况 下是如何排序的? 通过谷歌搜索,发现了一些线索,在score相同的情况下,redis使用字典排序,不过不是太明白什…

计算机网络相关知识点(二)

TCP如何保证传输过程的可靠性? 校验和:发送方在发送数据之前计算校验和,接收方收到数据之后同样需要计算,如果不一致,那么代表传输有问题。 确认应答序,序列号:TCP进行传输时数据都进行了编号…

排查内存泄露

1 通过Performance确认是否存在内存泄露 一个存在内存泄露的 DEMO 代码&#xff1a; App.vue <template><div><button click"myFn" style"width: 200px; height: 200px;"></button><home v-if"ishow"></hom…

Xcode15下载iOS17一直中断解决办法

1、问题描述 目前的 xcode 15 安装时&#xff0c;跟以前有个差别&#xff1a;以往的 xcode 安装时自带了 ide、sdk 等工具包&#xff0c;安装后即可开始开发&#xff0c;而最新的包则被分开成了不同的包&#xff0c;这里以 ios 开发包为例&#xff1a;Xcode_15.xip 和 iOS_17_…

软件测试之敏捷项目风险管理

敏捷项目管理是近年来最为流行的项目管理方式之一。这主要归功于敏捷管理的特点&#xff1a;尽早交付、持续改进、灵活管理、团队投入、充分测试。它能充分利用测试周期&#xff0c;并监测每个测试过程中容易出现的问题&#xff0c;加快项目迭代速度&#xff0c;从而推进项目高…

docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib

目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试&#xff1a; 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…

《优化接口设计的思路》系列:第四篇—接口的权限控制

系列文章导航 《优化接口设计的思路》系列&#xff1a;第一篇—接口参数的一些弯弯绕绕 《优化接口设计的思路》系列&#xff1a;第二篇—接口用户上下文的设计与实现 《优化接口设计的思路》系列&#xff1a;第三篇—留下用户调用接口的痕迹 《优化接口设计的思路》系列&#…

ROS2 从头开始:第 08/8回 - 使用 ROS2 生命周期节点简化机器人软件组件管理

一、说明 欢迎来到我在 ROS2 上的系列的第八部分。对于那些可能不熟悉该系列的人,我已经涵盖了一系列主题,包括 ROS2 简介、如何创建发布者和订阅者、自定义消息和服务创建、

02 MIT线性代数-矩阵消元 Elimination with matrices

一, 消元法 Method of Elimination 消元法是计算机软件求解线形方程组所用的最常见的方法。任何情况下&#xff0c;只要是矩阵A可逆&#xff0c;均可以通过消元法求得Axb的解 eg: 我们将矩阵左上角的1称之为“主元一”&#xff08;the first pivot&#xff09;&#xff0c;第…

【springboot3.x 记录】关于Jakarta包无法引入的问题

最近想将一些项目升级到springboot3.x和java17的时候&#xff0c;发现项目依赖中有Jakarta的包&#xff0c;但是代码标红提示没有相关的类&#xff0c;特此记录一下排查问题和最终解决问题的思路方法 一、发现问题 因为之前有创建过 springboot3.x java17 的项目&#xff0c;…

第6讲:v-for使用

目录 1.循环遍历 2.v-for遍历整形变量&#xff08;99乘法表&#xff09; 3.v-for遍历普通数组 4.v-for遍历数组对象 1.循环遍历 v-for指令基于一个数组渲染一个列表&#xff0c;它和JavaScript的遍历语法相似&#xff1a; v-for”item in list” list 是一个数组&#xff0c; i…

指针笔试题讲解

文章目录 题目答案与解析1、234、5、6、7、8、 题目 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }//由于还没学习结构体&#xff0c;这里告知结构体的大小是20个字节 //由于还没学习结…

2023-09-25 LeetCode每日一题(LFU 缓存)

2023-09-25每日一题 一、题目编号 460. LFU 缓存二、题目链接 点击跳转到题目位置 三、题目描述 请你为 最不经常使用&#xff08;LFU&#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始…

腾讯mini项目-【指标监控服务重构】2023-08-25

今日已办 traefik proxy jaeger Prometheus prometheus | Prometheus 配置完依然无法实现 web-url的前缀访问【待解决】 Set span storage type : elasticsearch services:elasticsearch:image: elasticsearch:7.17.12container_name: elasticsearchnetworks:- backend # …

2023.9.23 关于 HTTP 详解

目录 HTTP 协议 认识 URL HTTP 请求 认识方法 HTTP 响应 认识状态码 总结 HTTP 请求的构造 Form 表单构造 AJAX 构造 Postman 构造 HTTP 协议 应用层使用最广泛的协议浏览器 基于 HTTP协议 获取网站是 浏览器 和 服务器 之间的交互桥梁HTTP协议 基于传输层的 TCP协…

软件测试之Web安全测试详解

前言 随着互联网时代的蓬勃发展&#xff0c;基于Web环境下的应用系统、应用软件也得到了越来越广泛的使用。 目前&#xff0c;很多企业的业务发展都依赖于互联网&#xff0c;比如&#xff0c;网上银行、网络购物、网络游戏等。但&#xff0c;由于很多恶意攻击者想通过截获他人…

Visual Studio 2017 安装

C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接&#xff1a;https://pan.baidu…

【ROS入门】使用 ROS 服务(Service)机制实现同步请求与答复

文章结构 任务要求话题模型实现步骤自定义srv定义srv文件编辑配置文件编译 自定义srv调用vscode配置编写服务端实现编写客户端实现 执行启动roscore编译启动客户端和服务端编译启动roscore启动节点 任务要求 编写代码实现 ROS 中的服务请求与答复: 创建服务端&#xff0c;注册…

YZ09: VBA_Excel之读心术

【分享成果&#xff0c;随喜正能量】多要求自己&#xff0c;你会更加独立&#xff0c;少要求别人&#xff0c;你会减少失望&#xff0c;宁愿花时间去修炼 不完美的自己&#xff0c;也不要浪费时间去期待完美的别人&#xff01;。 我给VBA下的定义&#xff1a;VBA是个人小型自动…

uni-app:实现元素中实现竖直居中

效果展示 前&#xff1a; 后&#xff1a; 未实现前代码 <template><view class"container"><view class"centered-element">我是要被居中的元素</view></view> </template><script>export default {data() {r…