大话C语言:第33篇 数组指针

数组指针是一个指针变量,其值是一个数组的首地址,即数组中第一个元素的地址。数组指针与指向单个元素的指针不同,它指向整个数组,并允许通过指针运算来访问数组中的各个元素。

数组指针的声明通常包括指针的类型和它所指向的数组的类型。数组指针的定义,语法格式:

// 指向一维数组的数组指针
数据类型 数组名[n] = {初始值};
数据类型 (*指针名)[n] = &数组名// 指向二维数组的数组指针
数据类型 数组名[n][m] = {初始值};
数据类型 (*指针名)[m] = 数组名;

其中,指向一维数组的数组指针,代码示例:

// 数组指针指向一维数组的代码示例
#include <stdio.h>  int main() 
{  // 声明一个一维数组  int arr[] = {1, 2, 3, 4, 5};  // 声明一个指向整数的指针(这不是数组指针,只是一个普通指针)  int *ptr = arr;  // 使用指针访问数组元素  for (int i = 0; i < 5; i++) {  printf("%d ", ptr[i]); // 或者 (*ptr + i)  }  printf("\n");  // 现在,如果我们想要一个真正的数组指针,对于一个一维数组来说其实意义不大,  // 因为数组名本身就是指向数组首元素的指针。但为了演示,我们可以这样声明:  int (*array_ptr)[5] = &arr; // 指向一个包含5个整数的数组的指针  // 使用数组指针访问数组元素  for (int i = 0; i < 5; i++) {  printf("%d ", (*array_ptr)[i]); // 解引用数组指针,然后访问元素  }  printf("\n");  return 0;  
}

其中,指向二维数组的数组指针,代码示例:

// 数组指针指向二维数组的代码示例
#include <stdio.h>  int main() 
{  int arr[3][4] = {  {1, 2, 3, 4},  {5, 6, 7, 8},  {9, 10, 11, 12}  };  // 声明一个指向包含4个整数的数组的指针  int (*ptr)[4] = arr;  // 使用指针访问二维数组的元素  printf("%d\n", (*ptr)[0]); // 输出第一行第一列的元素,即1  printf("%d\n", (*ptr)[1]); // 输出第一行第二列的元素,即2  printf("%d\n", ptr[1][0]); // 输出第二行第一列的元素,即5  // 通过指针运算访问其他行  ptr++; // 现在ptr指向第二行  printf("%d\n", (*ptr)[0]); // 输出第二行第一列的元素,即5  printf("%d\n", (*ptr)[1]); // 输出第二行第二列的元素,即6  return 0;  
}

数组指针常用于以下情况:

  • 处理二维数组:在C语言中,二维数组在内存中是连续存储的,行与行之间紧密排列。通过数组指针,你可以方便地访问二维数组中的元素,而不需要使用嵌套循环。

  • 动态内存分配:当你需要动态地创建一个数组时,你可以使用 malloc 或其他内存分配函数,并通过数组指针来访问和操作这个动态数组。

  • 函数参数传递:当你想将一个数组作为参数传递给一个函数时,你通常会传递一个数组指针,而不是整个数组。这样可以避免复制整个数组,提高程序的效率。

其中,数组名做函数参数,函数的形参本质上就是指针。例如:

#include <stdio.h>// 下面3种写法完全等价
// void PrintArrary(int arr[10], int len)
// void PrintArrary(int arr[], int len)
void PrintArrary(int *arr, int len) 
{for (int index = 0; index < len; ++index) {printf("%d, ", arr[index]);}printf("\n");
}int main() 
{int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};int len = sizeof(arr) / sizeof(int]);// 数组名做函数参数PrintArrary(arr, len);return 0;
}

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

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

相关文章

AI有关的学习和python

一、基本概念 AIGC&#xff08;AI Generated content AI 生成内容&#xff09; AI生成的文本、代码、图片、音频、视频。都可以成为AIGC。 Generative AI&#xff08;生成式AI&#xff09;所生成的内容就是AIGC AI指代计算机人工智能&#xff0c;模仿人类的智能从而解决问题…

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有&#xff1a; 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块&#xff0c;只能说每个人画都有自己的理由&#xff0c;我的理由如下。 还有很多没有表达出来的东西&#xff0c;我也不知…

NXP i.MX 6系列处理器加入“产品长期供货计划”

近期&#xff0c;NXP&#xff08;恩智浦半导体&#xff09;的i.MX 6系列处理器已加入其“产品长期供货计划”&#xff0c;不同型号处理器的生命周期得到了10~15年的延长&#xff0c;确保了长期稳定的供货与维护。 &#xff08;NXP产品长期供货计划的目的&#xff0c;是给客户的…

Elasticsearch:Java ECS 日志记录 - log4j2

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松将日志格式化为与 ECS 兼容的 JSON。ECS 兼容的 JSON 日志记录可以帮我们简化很多分析&#xff0c;可视化及解析的工作。在今天的文章里&#xff0c;我来详述如何在 Java 应用里生成 ECS 相兼容的日志。 …

Prometheus各类监控及监控指标和告警规则

目录 linux docker监控 linux 系统进程监控 linux 系统os监控 windows 系统os监控 配置文件&告警规则 Prometheus配置文件 node_alert.rules docker_container.rules mysql_alert.rules vmware.rules Alertmanager告警规则 consoul注册服务 Dashboard JSON…

GD 32 流水灯

前言&#xff1a; 通过后面的学习掌握了一些逻辑架构的知识&#xff0c;通过复习的方式将学到的裸机任务架构的知识运用起来&#xff0c;同时巩固前面学到的知识&#xff0c;GPIO的配置等。 开发板上LED引脚使用示意图 注&#xff1a;此次LED灯的点亮凡是是高电平点亮&#xff…

如何解决ChromeDriver 126找不到chromedriver.exe问题

引言 在使用Selenium和ChromeDriver进行网页自动化时&#xff0c;ChromeDriver与Chrome浏览器版本不匹配的问题时有发生。最近&#xff0c;许多开发者在使用ChromeDriver 126时遇到了无法找到chromedriver.exe文件的错误。本文将介绍该问题的原因&#xff0c;并提供详细的解决…

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型&#xff0c;从上到下包括&#xff1a; 应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 TCP/IP模型是四层模型&…

uniapp原生插件开发实战——iOS打开文件到自己的app

用原生开发获取文件的名称、路径等能力封装为一个插件包供前端使用 首先根据ios插件开发教程&#xff0c;创建一个插件工程&#xff0c;template 选framework 开始编写代码&#xff1a; iOS 9 及以下版本会调用以下方法&#xff1a; - (BOOL)application:(UIApplication *_N…

关键词查找【Boyer-Moore 算法】

1、【Boyer-Moore 算法】 【算法】哪种算法有分数复杂度&#xff1f;- BoyerMoore字符串匹配_哔哩哔哩_bilibili BM算法的精华就在于BM(text, pattern),也就是BM算法当不匹配的时候一次性可以跳过不止一个字符。即它不需要对被搜索的字符串中的字符进行逐一比较&#xff0c;而…

HTML前端面试题之<iframe>标签

面试题&#xff1a;iframe 标签的作用是什么?有哪些优缺点 ? 讲真&#xff0c;刷这道面试题之前我根本没有接触过iframe&#xff0c;网课没讲过&#xff0c;项目实战没用过&#xff0c;但却在面试题里出现了&#xff01;好吧&#xff0c;我只能说&#xff1a;前端路漫漫&…

2024年软件系统与信息处理国际会议(ICSSIP 2024)即将召开!

2024年软件系统与信息处理国际会议&#xff08;ICSSIP 2024&#xff09;将于2024年10月25-27日在中国昆明举行。引领技术前沿&#xff0c;共谋创新未来。ICSSIP 2024将汇聚来自世界各地的专家学者&#xff0c;他们将在会上分享最新的研究成果、技术突破及实践经验。会议议题涵盖…

DataEase一键部署:轻松搭建数据可视化平台

DataEase是一个开源的数据可视化和分析工具&#xff0c;旨在帮助用户轻松创建和共享数据仪表盘。它支持多种数据源&#xff0c;包括关系型数据库&#xff0c;文件数据源&#xff0c;NoSQL数据库等&#xff0c;提供强大的数据查询、处理和可视化功能。DataEase 不仅是一款数据可…

通信原理-思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一&#xff1a;实验内容 二&#xff1a;实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口&#xff0c;为路由器R1和R3增加快速以太网接口模块NM-1FE-TX&#xff0c;安装后检查路由器的接…

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

bug+测试用例

bug的概念&#xff1a; 1.当且仅当规格说明是存在的并且正确&#xff0c;程序与规格说明之间的不匹配才是错误。 2.当需求规格说明书没有提到的功能&#xff0c;判断标准以最终用户为准&#xff1b;当程序没有实现其最终用户合理预期的功能要求时&#xff0c;就是软件错误 bug…

区块链浏览器开发指南分享

01 概括 区块链浏览器是联盟链上的一种数据可视化工具&#xff0c;用户可以通过web页面&#xff0c;直接在浏览器上查看联盟链的节点、区块、交易信息和子链信息、标识使用信息等&#xff0c;用以验证交易等区块链常用操作。 02功能模块 区块链网络概览 区块链网络概览显示…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说&#xff0c;创建一个文件&a…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

&#x1f387;&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳&#xff0c;欢迎大佬指点&#xff01; 欢迎志同道合的朋友一起加油喔 &#x1f4aa;&#x1f4aa;&#x1f4aa; 谢谢你这么帅…

MySQL可重复读的隔离机制下是否彻底解决了幻读?

答案&#xff1a;没有彻底解决。 一、什么是幻读&#xff1f; 当同一个查询在不同时间产生不同的结果集时&#xff0c;事务中就会出现幻读问题。 幻读关注的是记录数量的不同。 不可重复读关注的是记录内容的不同。 二、快照读和当前读 InnoDB引擎的默认隔离级别是可重复读&…