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

news2024/12/29 10:08:50

目录

前言:

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.coloradmin.cn/o/1040838.html

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

相关文章

win使用git(保姆级教程)

序言 上学期间用的git并不多,但是从研三实习以及后面工作来看,git是一项必备技能,所以在此来学习一下。 下载git安装包 打开网站,根据需求来下载;一般按照如下方式进行下载: 然后安装的时候记得按下图勾…

NebulaGraph实战:3-信息抽取构建知识图谱

自动信息抽取发展了几十年,虽然模型很多,但是泛化能力很难用满意来形容,直到LLM的诞生。虽然最终信息抽取质量部分还是需要专家审核,但是已经极大的提高了信息抽取的效率。因为传统方法需要大量时间来完成数据清洗、标注和训练&am…

32.栈的应用补充-表达式求值

目录 一. 前缀表达式与后缀表达式 二. 中缀表达式转后缀表达式的手算方法 三. 后缀表达式的手算方法 四. 后缀表达式的机算方法 五. 中缀表达式转前缀表达式的手算方法 六. 前缀表达式的机算方法 七. 中缀表达式转后缀表达式的机算方法 八. 中缀表达式的机算 一. 前缀表…

ElementUI首页导航和左侧菜单静态页面的实现,以及Mockjs和总线的介绍

目录 前言 一. Mock.js 1.1 什么是Mock.js 1.2 Mockjs的安装与配置 1.2.1 安装Mock.js 1.2.2 引入Mock.js 1.3 Mockjs的使用 1.3.1 定义数据测试文件 1.3.2 mock拦截ajax请求 二. 首页导航以及左侧菜单的搭建 2.1 什么是总线 2.2 创建三个vue组件 首页AppMain.vue组…

Learn Prompt- Midjourney Prompt:Prompt 提示语

基础结构​ 一个基本的提示可以简单到一个单词、短语或表情符号。非常短的提示将在很大程度上依赖于 Midjourney 的默认样式。 完整 prompt:可以包括一个或多个图像链接、多个文本短语或单词,以及一个或多个后缀参数 Image Prompts: 可以将图像 URL 添加…

Vue中前端导出word文件

很多时候在工作中会碰到完全由前端导出word文件的需求,因此特地记录一下比较常用的几种方式。 一、提供一个word模板 该方法提供一个word模板文件,数据通过参数替换的方式传入word文件中,灵活性较差,适用于简单的文件导出。需要…

Postgresql源码(113)表达式JIT计算简单分析

相关 《Postgresql源码(85)查询执行——表达式解析器分析(select 11如何执行)》 《Postgresql源码(113)表达式JIT计算简单分析》 1 普通表达式计算 普通表达式计算发生在优化器preprocess_expression中&am…

uni-app 使用 scss 实现推荐标签区域显示效果

效果图 <view class"tag-box"><view class"tag-tip"><view>店家</view><view>推荐</view></view> </view> 方法一 只需修改 $tagFontSize(字体大小) 即可 /* 推荐标签区域 */ .tag-box {$tagFontSize:…

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

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

算法与数据结构-堆

文章目录 什么是堆如何实现一个堆&#xff1f;如何基于堆实现排序&#xff1f;1. 建堆2. 排序 什么是堆 堆是一种特殊的树&#xff0c;特殊点有二&#xff0c;如下&#xff1a; 堆是一个完全二叉树&#xff1b;堆中每一个节点的值都必须大于等于&#xff08;或小于等于&#…

【Vue】Mock.js介绍和使用与首页导航栏左侧菜单搭建

目录 一、Mock.js 1.1 mockjs介绍 1.2 mock.js安装与配置 1.2.1 安装mock.js 1.2.2 引入mock.js 1.3 mock.js的使用 1.3.1 准备模拟数据 1.3.2 定义拦截路由 1.3.3 测试 二、首页导航栏左侧菜单搭建 2.1 自定义界面组件 (完整代码) 2.2 配置路由 2.3 组件显示折叠和…

uniapp ui安装

安装 ui uni-app官网 (dcloud.net.cn) 安装 pages.js配置 使用 <template><view class"bg"><div class"title"><uni-data-selectv-model"value":localdata"range"change"change">asa</uni-da…

GiliSoft USB Lock v10.5.0 电脑USB设备管控软件

网盘下载 软件功能特性 禁止USB / SD驱动器 禁用从USB / SD磁盘读取&#xff0c;禁用写入USB / SD磁盘&#xff0c;阻止非系统分区。它不允许任何类型的USB / SD驱动器访问您的计算机&#xff0c;除非您授权它或它已在可信设备白名单。 CD锁&#xff0c;块媒体和蓝光光盘 禁用…

代码阅读分析神器-Scitools Understand

这里写目录标题 前言概要功能介绍1.代码统计2.图形化分析3.代码检查 使用方法下载及使用 前言 作为一名程序员&#xff0c;阅读代码是一个必须要拥有的能力&#xff0c;但无奈很多代码逻辑嵌套非常多&#xff0c;看起来非常吃力&#xff0c;看了那段逻辑就忘记了刚才的逻辑&am…

Spring实例化源码解析之ComponentScanAnnotationParser(四)

上一章我们分析了ConfigurationClassParser&#xff0c;配置类的解析源码分析。在ComponentScans和ComponentScan注解修饰的候选配置类的解析过程中&#xff0c;我们需要深入的了解一下ComponentScanAnnotationParser的parse执行流程&#xff0c;SpringBoot启动类为什么这么写&…

01 MIT线性代数-方程组的几何解释

一, 线性方程的几何图像 The geometry of linear equations 线性代数的基本问题就是解n元一次方程组 eg&#xff1a;二元一次方程组 矩阵形式: 系数矩阵(coefficient matrix): 未知数向量: 线性方程组简记为Axb 二, 行图像 Row Picture 行图像遵从解析几何的描述&#xff0…

李宏毅hw-10 ——adversarial attack

一、查漏补缺&#xff1a; 1.关于glob.glob的用法&#xff0c;返回一个文件路径的 列表&#xff1a; 当然&#xff0c;再套用1个sort&#xff0c;就是将所有的文件路径按照字母进行排序了 2.relpath relative_path返回相对于基准路径的相对路径的函数 二、代码剖析&#xff…

Pytorch之AlexNet花朵分类

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 一、AlexNet 1.卷积模块 2.全连接模块 3.AlexNet创新点 1.更深的神经…

深度学习技巧应用28-强化学习的原理介绍与运用技巧实践

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用28-强化学习的原理介绍与运用技巧实践, 强化学习是一种机器学习的子领域,它使得一个智能体在与环境的交互中学习如何行动以最大化某种数值奖励信号。强化学习模型的关键特性是它的试错搜索和延迟奖励。 一、强化学习…

React 全栈体系(十四)

第七章 redux 六、react-redux 7. 代码 - react-redux 数据共享版 7.1 效果 7.2 App /* src/App.jsx */ import React, { Component } from "react"; import Count from "./containers/Count"; import Person from "./containers/Person";ex…