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

ops/2024/12/14 8:21:06/

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

视频:

目录

一、任务分析

二、必备知识与理论

三、任务实施


一、任务分析

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

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.ppmy.cn/ops/141762.html

相关文章

怎样把音频中某个乐器分离?分离乐器音轨技术

在音乐的浩瀚宇宙中&#xff0c;每一种乐器都承载着独特的音色与情感&#xff0c;它们交织在一起&#xff0c;共同编织出动人的旋律。然而&#xff0c;有时候&#xff0c;我们可能希望从一首复杂的音乐作品中单独聆听某个乐器的演奏&#xff0c;以更深入地理解其旋律线条、和声…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展&#xff0c;有力推动了社会的数智化转型&#xff1b;与此同时&#xff0c;带来的相关安全风险也日益凸显。近日&#xff0c;在北京市举办的通明湖人工智能开发与应用大会上&#xff0c;360智脑总裁张向征以“大模型安全研究与实践”为主题&…

基于用户多元需求视角下 AI 智能名片 O2O 商城小程序的价值与发展策略

摘要&#xff1a;本文深入剖析在当今用户需求多元化的背景下&#xff0c;从显性与隐性需求层面探讨各类产品的发展趋势。以海飞丝等产品为例阐述传统产品功能与新兴多元需求的演变&#xff0c;进而引入 AI 智能名片 O2O 商城小程序&#xff0c;详细分析其如何契合用户多维度需求…

基于python的Selenium webdriver环境搭建(笔记)

一、PyCharm安装配置Selenium环境 本文使用环境&#xff1a;windows11、Python 3.8.1、PyCharm 2019.3.3、Selenium 3.141.0 测试开发环境搭建综述 安装python和pycharm安装浏览器安装selenium安装浏览器驱动测试环境是否正确 这里我们直接从第三步开始 1.1 Seleium安装 …

w~深度学习~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12663254 #Motion Plan 代码 github.com/liangwq/robot_motion_planing 轨迹约束中的软硬约束 前面的几篇文章已经介绍了&#xff0c;轨迹约束的本质就是在做带约束的轨迹拟合。输入就是waypoint点list&#xff0c;约束…

PLC6-CODESYS 的库问题:更改库版本

目录 【一】在安装SP8时NBS 3.5.8.0 依赖的TCP 3.5.8.10不能下载导致程序报错。 【二】移植codesys程序时通常会有库缺失&#xff0c;需要在库管理器选项卡中电机下载缺失的库&#xff0c;也可在报错信息处右键更新占位符 【三】低版本软件添加库需要点击添加库--高级--然后…

go 怎么判断一个文件存在,并且如果存在则读取文件,并json反序列化 string切片

在 Go 语言中&#xff0c;你可以使用标准库中的 os 和 encoding/json 包来检查文件是否存在、读取文件内容并将其反序列化为 JSON 格式的字符串切片。以下是一个示例代码&#xff0c;展示了如何实现这一功能&#xff1a; go package main import ( “encoding/json” “fmt”…

CTFshow-命令执行(Web58-77)

CTFshow-命令执行(Web58-77) Web58 <?php if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }Warning: system() has been disabled for security reasons in /var/www/html/index.php(17) : eval()d code on line 1 本题对于passthru&…