C语言程序设计P6-1【应用指针进行程序设计 | 第一节】——知识要点:指针的概念、定义和运算、指针变量作函数的参数

知识要点:指针的概念、定义和运算、指针变量作函数的参数

视频:

目录

一、任务分析

二、必备知识与理论

三、任务实施


一、任务分析

输入两个整数,按大小顺序输出,要求用函数处理,而且用指针类型的数据作函数参数。

1.首先大家对这个任务并不陌生,在这里要求用函数调用的形式来完成;

2.定义一个自定义函数swap,用于交换两个变量(a和b)的值;

3.要求用指针变量作函数参数,那么swap函数的形参p1、p2是指针变量;

4.在主函数中,对两个整数比较大小,将两个整型变量的地址作为实参传递给swap函数中的p1、p2。

二、必备知识与理论

1.指针的概念

为了掌握指针的基本概念,巧妙而恰当地使用指针,必须了解计算机硬件系统的内存地址、指针之间的关系和变量的直接访问与间接访问。

(1)内存地址

在计算机中,所有的数据都存放在存储器中,一般把存储器中的一个字节称为一个内存单元,为了方便地访问这些内存单元,我们为每个内存单元进行了编号,这样根据内存单元的编号可以准确地找到内存单元。通常我们把这些内存单元的编号叫做内存地址。

(2)指针

变量的内存地址在程序运行过程中起到寻找变量数值的作用,就好比用一个指针指向了一个变量,因此变量的地址常被称为“指针”。

(3)变量的地址和变量的内容

在程序中定义变量时,计算机就按变量的类型,为其分配一定长度的存储单元。

(4)变量的直接访问与间接访问

在C语言程序中,使用一个变量可以直接通过其变量名存取数值,这种方式称为“直接访问方式”。除此之外,还可以把该变量的地址存入到另一个指针变量中,然后通过该指针变量来存取变量的值,这种访问方式称为“间接访问方式”。

注意:内存单元的指针(地址)和内存单元的内容是两个不同的概念。

2.指针变量的定义

C语言规定所有变量在使用之前必须定义,规定其类型。指针变量不同于整型变量和其它类型的变量,它是专门用来存放地址的。

指针变量定义的一般格式为:存储类型  数据类型  *指针变量名[=初始地址值];

3.指针变量的引用

指针变量同普通变量一样,使用之前不仅要说明,而且必须赋予具体的值。指针变量的赋值只能赋予地址,不能赋予其它任何数据,否则将引起错误。禁止使用未初始化或未赋值的指针,此时,指针变量指向的内存空间是无法确定的,使用它可能导致系统的崩溃。

4.指针的运算

如同其它变量一样,指针变量也可以参与一些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算及关系运算。

(1)指针运算符

&运算符:取地址运算符。其功能是取变量的地址。&是单目运算符,其结合性为自右向左。

*运算符:指针运算符(或称“间接访问”运算符)。用于表示指针所指向的变量。*是单目运算符,其结合性为自右向左。

(2)赋值运算

指针变量的赋值运算有以下几种形式:

①指针变量在定义的时候直接初始化赋值,前面已介绍过。

②把一个变量的地址赋予指向相同数据类型的指针变量。

③把一个指针变量的值赋予指向相同类型变量的另一个指针变量。

④把数组的首地址赋予指向数组的指针变量。

⑤把字符串的首地址赋予指向字符类型的指针变量。

⑥把函数的入口地址赋予指向函数的指针变量。

(3)加减运算

对于指向数组的指针变量,可以加上或减去一个整数n。设p是指向数组a的指针变量,则p+n、p-n、p++、p--、++p、--p运算都是合法的。

①指针加减任意整数运算

指针变量与一个整数的加或减的操作实质上是一种地址运算。

②两指针变量相减

只有指向同一数组的两个指针变量之间才能进行相减运算,否则运算毫无意义。

(4)指针的关系运算

指向同一数组的两指针变量进行关系运算时,可表示它们所指数组元素之间的关系。

空指针是由对指针变量赋予0值而得到的。

例如:#define NULL 0

int *p=NULL;

对指针变量赋0值和不赋值是不同的。指针变量未赋值时,可以是任意值,是不能使用的,否则将造成意外错误。而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。

5.指针变量作函数的参数

函数的参数不仅可以是整型、实型、字符型及数组等数据,也可以是指针类型的数据。当使用指针类型的数据作函数参数时,实际上是将一个变量的地址传向另一个函数。由于被调函数中获得了变量的地址,该地址空间中的数据变更在函数调用结束后将被物理地址保留下来(不同于用简单变量作函数参数时的单向值传递关系)。

三、任务实施

本任务是输入两个整数,按大小顺序输出。(用函数处理,而且用指针类型的数据作函数参数)。

算法分析:

(1)这个任务跟【例6.2】的任务相同,但在这里要求用函数调用的形式来完成。

(2)定义一个自定义函数swap,用于交换两个变量(a和b)的值。

(3)要求用指针变量作函数参数,那么swap函数的形参p1、p2是指针变量。

(4)在主函数中,对两个整数比较大小,将两个整型变量的地址作为实参传递给swap函数中的p1、p2。

#include <stdio.h>swap(int *p1,int *p2)   /*定义函数swap,参数为指针类型*/{int temp;temp=*p1;*p1=*p2;*p2=temp;}main(){int a,b;int *pt1,*pt2;  /*定义两个指针变量*/scanf("%d,%d",&a,&b);pt1=&a;pt2=&b;   /*为指针变量赋值*/if(a<b)  swap(pt1,pt2);   /*调用函数swap*/printf("\n%d,%d\n",a,b);}

运行结果如下:

56,78↙

78,56

由于在调用函数时,实际参数是指针变量,形式参数也是指针变量,实参与形参相结合,函数调用将指针变量传递给形式参数p1和p2。由于此时传递的是变量地址,使得在被调用函数中p1和p2具有了pointer_1和pointer_2的值,指向了与主函数相同的内存变量,并对其在内存存放的数据进行了交换。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu系统下部署大语言模型:Ollama和OpenWebUI实现各大模型的人工智能自由

之前在window下安装过 Ollama和OpenWebUI搭建本地的人工智能web项目(可以看我之前写的文章),无奈电脑硬件配置太低,用qwen32b就很卡,卡出PPT了,于是又找了一台机器安装linux系统,在linux系统下测试一下速度能否可以快一些。 系统硬件介绍 Ubuntu 22.04.4 LTS CPU: i5…

算法知识-16-树

一、树的基本概念 度&#xff08;Degree&#xff09; 一个结点的子树个数&#xff0c;称为这个结点的度。 树中各结点度的最大值&#xff0c;称为这棵树的度。 深度&#xff08;Depth&#xff09; 一棵树中所有的结点层次的最大值称为树的深度。 二、二叉树的概念 定义 …

学习threejs,加载天地图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Web墨卡托投影 二、&#x…

DCI format2_6会配置在哪些cell上去接收?

根据38.213中的描述&#xff0c;DCI format 2_6可以在PCell和SpCell上检测&#xff0c;而相关cell的定义如上。

C++多线程实战:掌握图像处理高级技巧

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 在当今的计算世界中,…

深度优先遍历(DFS)

深度优先遍历&#xff08;DFS&#xff09; 1. 计算布尔二叉树的值2. 求根节点到叶节点数字之和3.二叉树剪枝4.验证二叉搜索树5. 二叉搜索树中第 K 小的元素6. 二叉树的所有路径 深度优先遍历&#xff08;DFS&#xff0c;全称为Depth First Traversal&#xff09;&#xff0c;是…

免费下载 | 2024算网基础设施成熟度研究报告

《2024算网基础设施成熟度研究报告&#xff08;2023年&#xff09;》的核心内容概括如下&#xff1a; 算网基础设施总体发展态势&#xff1a; 算网基础设施成为数字化转型的坚实底座&#xff0c;推动算力与网络的深度融合。 算网基础设施已上升为各国信息战略的重要抓手。 算…

ITK-腐蚀

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 腐蚀原理 ‌‌图像形态学腐蚀是图像处理中的一种基本操作&#xff0c;主要用于图像细化、目标提取、去除小的干扰物体以及在特定…

MySQL多表查询时有哪些连接方式?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL多表查询时有哪些连接方式?】面试题。希望对大家有帮助&#xff1b; MySQL多表查询时有哪些连接方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中进行多表查询时&#xff0c;常见的连接方式有以下…

Ollama管理本地开源大模型,用Open WebUI访问Ollama接口

现在开源大模型一个接一个的,而且各个都说自己的性能非常厉害,但是对于我们这些使用者,用起来就比较尴尬了。因为一个模型一个调用的方式,先得下载模型,下完模型,写加载代码,麻烦得很。 对于程序的规范来说,只要东西一多,我们就需要一个集中管理的平台,如管理python…

Docker 安装 sentinel

Docker 安装系列 1、拉取 [rootTseng ~]# docker pull bladex/sentinel-dashboard Using default tag: latest latest: Pulling from bladex/sentinel-dashboard 4abcf2066143: Pull complete 1ec1e81da383: Pull complete 56bccb36a894: Pull complete 7cc80011dc6f: Pull…

Python实现中国象棋

探索中国象棋 Python 代码实现&#xff1a;从规则逻辑到游戏呈现 中国象棋&#xff0c;这款源远流长的棋类游戏&#xff0c;承载着深厚的文化底蕴与策略智慧。如今&#xff0c;借助 Python 与 Pygame 库&#xff0c;我们能够在数字世界中复刻其魅力&#xff0c;深入探究代码背后…

Spring--07-01---@Transactional注解失效的8大场景

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Transactiona1.默认回滚&#xff1a;RuntimeException 1.Transactional注解失效的8大场景1.数据库引擎是否支持事务3.方法不是public的4.自身调用5.数据源没有配置事…

SMMU软件指南SMMU编程之寄存器

安全之安全(security)博客目录导读 本博客介绍了SMMUv3的编程接口&#xff1a; • SMMU寄存器 • 流表&#xff08;Stream table&#xff09; • CD&#xff08;Context Descriptor&#xff09; • 事件队列&#xff08;Event queue&#xff09; • 命令队列&#xff08;…

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码&#xff0c;oj模块会在所有在线的后端主机中选择一个负载情况最低的主机&#xff0c;将用户的代码提交给该主机&#xff0c;该主机进行编译运行&#xff0c;将结果返回…

python 基于 docx 文件模板生成 docx 或 PDF 文件

需求背景 提供一个Word文档模板&#xff0c;使用python程序替换里边的占位符&#xff0c;替换内容包括文本和图片&#xff0c;然后输出docx或者PDF文件。 功能演示 输入示例 输出示例 实现程序 import os import shutil import subprocess import timefrom docx import Doc…

使用 Ansys Fluent 对气体泄漏检测进行建模

了解使用 Ansys Fluent 仿真气体泄漏和确保安全的前沿技术。 挑战 气体泄漏对人类安全和环境构成重大风险。及早检测气体泄漏可以防止潜在的灾难&#xff0c;包括爆炸、火灾和有毒物质暴露。有效的气体泄漏检测系统对于石油和天然气、化学加工和住宅基础设施等行业至关重要。…

Mac软件推荐

Mac软件推荐 截图SnipasteXnipBob 快捷启动Raycast 系统检测Stats 解压缩The UnarchiverKeka&#xff08;付费&#xff09; 视频播放IINA 视频下载Downie&#xff08;付费&#xff09; 屏幕刘海TopNotchMediaMate&#xff08;付费&#xff09;NotchDrop&#xff08;付费&#x…

在 Kibana 中为 Vega Sankey 可视化添加过滤功能

作者&#xff1a;来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗&#xff1f;了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中&#xff0c;我们将了解如何启用 Vega Sankey 可视…

阿里云数据库MongoDB版助力极致游戏高效开发

客户简介 成立于2010年的厦门极致互动网络技术股份有限公司&#xff08;以下简称“公司”或“极致游戏”&#xff09;&#xff0c;是一家集网络游戏产品研发与运营为一体的重点软件企业&#xff0c;公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中&#xff0c;公…