指针及其应用

1.定义

指针:也是一个变量,存放所指变量的地址,根据变量定义的不同,指针指向的类型也不同
注意:*是与前面类型一体的

int main(void)
{int* p;  //等价于int *p;//为了区分变量,C语言中一般将*放置于变量名前面int* p,p1;  //p是指向int类型的指针,p1是指向int类型的普通变量//上面语句等价下面语句,仅仅是下面语句看着更易区分int *p,p1;  //p是指向int类型的指针,p1是指向int类型的普通变量return 0;
}

2.初始化

//指针的初始化
//1.第一种初始化
int main(void)
{int a = 0x66;int *p;  //定义一个指向int的指针pp = &a;   //指针指向a的地址return 0;
}
//2.第二种初始化
int main(void)
{int a = 0x66;int *p = &a;return 0;
}

使用指针:
*p相当于解引用,去找指针存储的地址,根据地址去找对应的数据。

操作方式举例解释
取地址p = &a;将数据a的首地址赋值给p
取内容*p;取出指针指向的数据单元
p++; 或者 p =p+5;指针向下移动一个数据宽度/指针向下移动5个数据宽度(地址增大)
p–; 或者 p =p-5;指针向上移动一个数据宽度/指针向上移动5个数据宽度(地址减小)

3.数组与指针

  • 数组即相同数据类型变量的集合,数据名即为指向该数据类型的指针。
  • 数组的定义等效于申请内存、定义指针和初始化
int main()
{char a[] = { 0x34, 0x35, 0x36 };char *p;p = a;  //a为数组的首地址,相当于也是一个指针printf("%x\n", a[0]);printf("%x\n", a[1]);printf("%x\n", a[2]);//利用指针解引用printf("*p为%x\n", *p);printf("*(p+1)为%x\n", *(p+1));printf("*(p+2)为%x\n", *(p + 2));return 0;
}

在这里插入图片描述

4.指针应用

  1. 传递参数
    (1)使用指针传递大容量的参数,主函数和子函数使用的是同一套数据,避免参数传递过程中的数据复制,提高运行效率,减少内存占用(即为了不开辟一块大的空间地址,减少内存的使用)
    == 需要理清值传递与址传递的区别:==
值传递址传递
函数调用后,实参的值不会发生改变函数调用后,实参的值会发生改变
形参会开辟与实参相同大小空间的内存形参与实参公用一段内存空间
隔离数据,安全数据公用,已造成数据的丢失与差错

使用址传递,形参和实参公用一段内存,当形参改变数值时,实参的值也会发生变化,为了防止出现这种情况,一般在函数调用前加const,只允许对参数进行读,不可以修改。

//加上const,只允许数组被读,不允许修改
int FindMax(const int* arr[], int Count)
{int Max = arr[0];for (int i = 1; i < Count; i++){if (arr[i] > Max){Max = arr[i];}}return Max;
}
int main(void)
{int a[] = { 3, 5, 7, 1, 9 };int max = 0;max = FindMax(a, sizeof(a) / sizeof(a[0]));printf("max为%d\n", max);return 0;
}

在这里插入图片描述
(2)使用指针传递输出参数,利用主函数和子函数使用同一套数据的特性,实现数据的返回,可实现多返回值函数的设计
例子:返回数组最大值及其出现的次数,利用指针有两个返回值

//找出最大值并返回最大值及其出现的次数
//*max与*Count分别与主函数里面的Max和Count共用一段地址
void FindMaxCount(int *max, int *Count, const int *arr, int length)
{*max = arr[0];*Count = 1;for (int i = 1; i < length; i++){if (*max < arr[i]){*max = arr[i];  //更新最大值*Count = 1;   //并将Count置为1}else if (*max == arr[i]){(*Count)++;}}
}
int main(void)
{int a[] = { 9, 100, 24, 56, 77, 99, 100 };int Max;   //找最大值int Count;  //最大值出现的次数FindMaxCount(&Max, &Count, a, sizeof(a)/sizeof(a[0]));printf("Max为%d,Count为%d\n", Max, Count);return 0;
}

在这里插入图片描述

  1. 传递返回值
  • 将模块内的共有部分返回,让主函数持有模块的“句柄”,便于程序对指定对象的操作

句柄:类似于把手,有了把手,就可操作程序。在这里插入图片描述
3. 直接访问物理地址下的数据
(1)访问硬件指定内存下的数据,如设备ID号等
(2)将复杂格式的数据转换为字节,方便通信与存储

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

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

相关文章

.NET 8.0 发布到 IIS

如何在IIS&#xff08;Internet信息服务&#xff09;上发布ASP.NET Core 8&#xff1f; 在本文中&#xff0c;我假设您的 Windows Server IIS 上已经有一个应用程序池。 按照步骤了解在 IIS 环境下发布 ASP.NET Core 8 应用程序的技巧。 您需要设置代码以支持 IIS 并将项目配…

智算让大模型触手可及

本文整理自2023年 12 月 20 日举办的「2023 百度云智大会智算大会」主论坛&#xff0c;百度智能云 AI 与大数据平台总经理忻舟的主题演讲《智算让大模型触手可及》。 在之前极客公园举办的创新大会上&#xff0c;百度集团董事长兼 CEO 李彦宏先生提到&#xff1a;卷 AI 原生应用…

【Linux】各目录说明

【常见目录说明】 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等)&#xff0c;常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录&#xff0c;是用户主目录的基点&#xff0c;比如用户user的主目录就是/home/user&#xff0c;可以…

智能助手的巅峰对决:ChatGPT对阵文心一言

在人工智能的世界里&#xff0c;ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能&#xff0c;吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢&#xff1f;下面就让我们一探究竟。 首先来谈谈智能回复能力…

数据结构-排序

这篇文章主要记录各种排序算法的思想及实现代码&#xff0c;最后对各种算法的性能进行了对比。 目录 排序的概念及其运用 排序的概念 排序运用 常见的排序算法 常见排序算法的实现 插入排序 基本思想 直接插入排序 希尔排序 选择排序 基本思想 直接选择排序 堆排序…

C++设计模式-- 2.代理模式 和 外观模式

文章目录 代理模式外观模式角色和职责代码演示一&#xff1a;代码演示二&#xff1a;外观模式适用场景 代理模式 代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合 或不能直接引用另一个对象&#xff0c;而代…

数据结构与算法:快速排序

数据结构与算法&#xff1a;快速排序 快速排序荷兰国旗问题霍尔版本递归优化小区间优化 PartSort优化三数取中 挖坑法前后指针法 非递归法 快速排序 荷兰国旗问题 想要理解快速排序&#xff0c;就先理解这个问题&#xff1a; [LeetCode75.颜色分类] 荷兰国旗是由红白蓝三色组…

10.云原生之在线开发调试

云原生专栏大纲 文章目录 vscode-server介绍VSCode Server 和云开发结合vscode-server安装code-server安装插件在线安装插件离线安装插件安装中文插件 配置开发环境在容器中安装开放环境Dockerfile制作镜像 git拉取项目 vscode-server介绍 VSCode Server&#xff08;Visual S…

动态内存面试的经典题目

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

网络安全中的“三高一弱”和“两高一弱”是什么?

大家在一些网络安全检查中&#xff0c;可能经常会遇到“三高一弱”这个说法。那么&#xff0c;三高一弱指的是什么呢&#xff1f; 三高&#xff1a;高危漏洞、高危端口、高风险外连 一弱&#xff1a;弱口令 一共是4个网络安全风险&#xff0c;其中的“高危漏洞、高危端口、弱…

电脑怎么录制屏幕?看这一篇就够了

在数字时代&#xff0c;电脑屏幕录制已经成为人们日常生活中一个越来越重要的工具。无论是录制在线课程、游戏精彩时刻&#xff0c;还是远程会议、软件演示&#xff0c;屏幕录制都可以帮助我们更好地保存和分享这些信息。可是您知道电脑怎么录制屏幕吗&#xff1f;本文将介绍两…

旧电脑追加内存条

内存条基本知识 DDR4 2666 DDR&#xff08;Double Data Rate&#xff09;双倍速率 4 第四代 2666 内存主频2666MHz 内存时序 内存的延迟时间 传输带宽 MB/s 内存和CPU之间的传输速度 针脚数 数字-PIn 288-PIN就是288个针脚 选购内存条 …

【国产mcu填坑篇】华大单片机(小华半导体)一、SPI的DMA应用(发送主机)HC32L136

最近需要用华大的hc32l136的硬件SPIDMA传输&#xff0c;瞎写很久没调好&#xff0c;看参考手册&#xff0c;瞎碰一天搞通了。。。 先说下我之前犯的错误&#xff0c;也是最宝贵的经验&#xff0c;供参考 没多看参考手册直接写&#xff08;即使有点烂仍然提供了最高的参考价值。…

iis配置asp网站

1.安装IIS的ASP win7和win10都是一样的 下安装IIS时ASP一般被默认不选中的状态&#xff0c;因此需要打开IIS检查功能视图栏中是否存在ASP选项&#xff0c;若没有则需要从控制面板->程序和 功能->打开或关闭Windows功能->Internet信息服务->万维网服务->应用程序…

数环通更新动态|新增连接器抖店自建、叮当OKR、千易ERP、货拉拉

更新快速预览 新增连接器4个 抖店自建 叮当OKR 千易ERP 货拉拉 应用更新2个 百度统计&#xff08;2&#xff09; 旺店通&#xff08;1&#xff09; 应用连接器 新增连接器 1.抖店自建 抖店是抖音官方打造的电商商家实现一站式经营平台&#xff0c;为商家提供全链路服务&#xf…

Selenium定位元素的方法css和xpath的区别

selenium是一种自动化测试工具&#xff0c;它可以通过不同的定位方式来识别网页上的元素&#xff0c;如id、name、class、tag、link text、partial link text、css和xpath。 css和xpath是两种常用的定位方式&#xff0c;它们都可以通过元素的属性或者层级关系来定位元素&#…

MacOS环境下Kali Linux安装及使用指导

Kali Linux是一个开源的、基于Debian的Linux发行版&#xff0c;面向各种信息安全任务&#xff0c;如渗透测试、安全研究、计算机取证和逆向工程&#xff0c;是最先进的渗透测试发行版&#xff0c;它的前身是BackTrack。 1. 我们为什么要用Kali Linux 由于Kali Linux具有以下特…

【脑筋急转弯系列】乒乓球称重问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

FDTD2018a安装问题记录

FDTD2018a安装问题记录 目录问题解决方案 目录 问题 解决方案 电脑名字如果是中文改成英文

全局唯一ID实现方案——雪花算法

全局唯一ID实现方案——雪花算法 雪花算法原理 Snowflake&#xff0c;雪花算法是由Twitter开源的分布式ID生成算法&#xff0c;以划分命名空间的方式将 64-bit位分割成多个部分&#xff0c;每个部分代表不同的含义。而 Java中64bit的整数是Long类型&#xff0c;所以在 Java 中…