指针数组和数组指针(详细解释)

指针数组

指针数组的作用

指针数组和数组指针是C语言中常用的概念,它们分别有不同的作用和用法。

  1. 指针数组: 指针数组是一个数组,其中的每个元素都是指针类型。它可以用来存储多个指针,每个指针可以指向不同的数据类型或者相同的数据类型。指针数组的作用是方便地管理多个指针,可以通过遍历数组来访问每个指针所指向的数据。
int* ptrArray[5];  // 定义一个包含5个指针的指针数组
int a = 1, b = 2, c = 3;
ptrArray[0] = &a;  // 第一个指针指向变量a
ptrArray[1] = &b;  // 第二个指针指向变量b
ptrArray[2] = &c;  // 第三个指针指向变量cfor (int i = 0; i < 3; i++) {printf("%d\n", *ptrArray[i]);  // 输出每个指针所指向的值
}

—————————————————————————————————————————————————————————————————————————————————————— 

整形数组 存放整形的数组

字符数组 存放字符的数组

指针数组 存放字符的数组

指针数组是一个数组,其中的每个元素都是指针类型。简单来说,它是一个存储指针的数组。

定义一个指针数组的语法

<数据类型> *<数组名>[<数组大小>];

其中,<数据类型>表示指针所指向的数据类型,<数组名>是数组的名称,<数组大小>表示数组的大小。

指针数组可以存储多个指针,每个指针可以指向不同的内存地址。这使得指针数组非常灵活,可以用于存储不同类型的数据或者不同对象的地址。

例如,定义一个指针数组来存储整型指针:

int *ptrArray[5];

这个指针数组可以存储5个整型指针。每个元素都可以指向一个整型变量或者整型数组。

使用指针数组时,可以通过索引来访问和操作每个指针元素。例如,可以通过ptrArray来访问第一个指针元素,并通过*ptrArray来访问该指针所指向的值。

总结一下,指针数组是一个存储指针的数组,它提供了一种灵活的方式来存储和操作不同类型的指针

下面进行指针数组的举例(参考指针数组模拟二维数组)

指针篇章-(2)-(一级指针和二级指针之间的理解)-CSDN博客

 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

数组指针 

数组指针的作用

数组指针的作用主要有以下几个方面:

  1. 遍历数组:通过数组指针,可以使用指针算术运算来遍历数组中的元素,实现对数组的遍历操作。
  2. 传递数组给函数:通过将数组指针作为参数传递给函数,可以在函数内部对数组进行操作,而无需复制整个数组。
  3. 动态分配内存:通过数组指针,可以使用动态内存分配函数(如malloc)来动态创建数组,灵活地管理内存空间。

 —————————————————————————————————————————————————————————————————————————————————————

数组指针变量是什么

数组指针是指向数组的指针变量。它可以用来表示数组的首地址,并可以通过指针的偏移来访问数组中的元素。定义数组指针的语法如下:

其中,数据类型表示数组中元素的类型,指针变量名是指针变量的名称,数组长度表示数组的长度。

根本的说

指针数组,是数组

数组指针是指针

数组指针是指向数组的指针,它可以指向数组的首地址。通过数组指针可以访问数组中的元素,可以进行指针运算来遍历数组。例如,int* ptr 表示一个指向 int 类型的数组的指针。

数组指针变量是一个变量,它存储了一个数组指针的地址。它本身并不指向数组,而是指向一个指针,这个指针指向数组的首地址。通过数组指针变量可以间接地访问数组中的元素。例如,int* arrPtr[] 表示一个数组,其中的每个元素都是 int 类型的指针。

不加上括号则p和【】是一体的 加上了 则不是一体 [ ]的优先级更高

—————————————————————————————————————————————————————————————————————————————————————  

数组指针示范1

 这里取出的是整个数组的地址 ,但是他本身代表的的是数组首元素的地址 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() 
{int arr[10] = { 0 };int* pl = arr;printf("%p\n", pl);printf("%p\n", pl + 1);//所以+1 加上的是一个地址大小int(*p2)[10] = &arr;//这里取出的是整个数组的地址 ,但是他本身代表的的是数组首元素的地址 printf("%p\n", p2);printf("%p\n", p2 + 1);//所以+1 加上的是整个地址return 0;
}

—————————————————————————————————————————————————————————————————————————————————————  

数组指针语法格式 

数据类型 (*指针变量名)[数组长度];

这里注意要带括号 

int arr[5] = {1, 2, 3, 4, 5};
int (*ptr)[5];  // 定义一个指向整型数组的指针变量
ptr = &arr;     // 将指针指向数组的首地址

—————————————————————————————————————————————————————————————————————————————————————  

数组指针示范 2

#include <stdio.h>int main() {int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int (*p)[10] = &arr;int i = 0;for (i = 0; i < 10; i++) {printf("%d ", (*p)[i]);}return 0;
}
在main函数中,首先定义了一个长度为10的整型数组arr,
并初始化了数组的元素。然后定义了一个指向数组的指针p,
并将其指向数组arr。接下来使用一个循环遍历数组arr,
通过指针p来访问数组元素,并使用printf函数将每个元素打印出来。

—————————————————————————————————————————————————————————————————————————————————————  

二维数组传参的本质

一维数组和二维数组

指针指向第一行的五个元素的数组

一次跳过一行

j是二维数组里面的一维数组的每个元素

二维数组传参可以写成数组也可以写成指针的形式

补充

这里详细介绍二维数组和一维数组以及指针的的关系,在指针5里面会进行详细介绍

这里可以先进行学习一下 这里主要是讲解的是数组名的代表的分别是什么

sizeof和strlen的详细万字解读-CSDN博客 

——————————————————————————————————————————————————————————————————————————————————————

指针数组和数组指针二者的区别总结

  1. 数组指针(Array Pointer): 数组指针是指向数组的指针变量。它可以用来访问数组中的元素。数组指针的语法格式如下:

    数据类型 (*指针变量名)[数组长度];
    这里的数据类型表示数组中元素的类型,指针变量名是指向数组的指针变量的名称,数组长度表示数组的长度。例如,如果要定义一个指向整型数组的指针变量,可以使用以下语法:int (*ptr)[5];
    这样就定义了一个指向包含5个整型元素的数组的指针变量ptr。

  2. 指针数组(Array of Pointers): 指针数组是一个数组,其中的每个元素都是指针。它可以存储多个指针值。指针数组的语法格式如下:

    数据类型 *指针数组名[数组长度];
    这里的数据类型表示指针所指向的数据类型,指针数组名是指针数组的名称,数组长度表示数组的长度。例如,如果要定义一个包含3个整型指针的指针数组,可以使用以下语法:int *arr[3];
    这样就定义了一个包含3个整型指针的指针数组arr。

实例剖析 

指针篇章-(冒泡排序详解)-CSDN博客 

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

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

相关文章

xxl-job学习记录

1、应用场景 例&#xff1a; 某收银系统需要在每天凌晨统计前一天的财务分析、汇总 某银行系统需要在信用卡还款日前三天发短信提醒等 2、为什么需要使用任务调度 spring中提供了注解Scheduled的注解&#xff0c;这个注解也可以实现定时任务的执行 我们只需要在方法上使用这…

人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)

1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法&#xff0c;属于聚类&#xff08;clustering&#xff09;算法的一种&#xff0c;是应用最广泛的聚类算法之一。所谓聚类&#xff0c;即根据相似性原则&#xff0c;将具有较高相似度的数据对象划分至同一类簇&#xff0c;…

2024 年中国高校大数据挑战赛赛题 D:行业职业技术培训能力评价完整思路以及源代码分享

中国是制造业大国&#xff0c;产业门类齐全&#xff0c;每年需要培养大量的技能娴 熟的技术工人进入工厂。某行业在全国有多所不同类型&#xff08;如国家级、 省级等&#xff09;的职业技术培训学校&#xff0c;进行 5 种技能培训。学员入校时需要 进行统一的技能考核&#xf…

数字化转型导师坚鹏:科技金融政策、案例及数字化营销

科技金融政策、案例及数字化营销 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融如何数字化营销&#xff1f; 课程特色&#xff1a; 以案例的方式解读原…

【个人开发】llama2部署实践(二)——基于GPU部署踩坑

折腾了一整天&#xff0c;踩了GPU加速的一堆坑&#xff0c;记录一下。 1.GPU加速方式 上篇已经写了llama2部署的大概流程&#xff1a;【【个人开发】llama2部署实践&#xff08;一&#xff09;】——基于CPU部署 针对llama.cpp文件内容&#xff0c;仅需再make的时候带上参数…

数字建筑欢乐颂,智慧工地共筑美好未来!

在解决农民工人欠薪这一长期困扰建筑业的难题上&#xff0c;某建筑公司响应政策&#xff0c;严格按照实名制管理&#xff0c;实施过程中发现并克服了传统管理模式的痛点&#xff1a;聊天群组的信息时&#xff0c;往往会被淹没在“收到”回复中&#xff0c;影响沟通效率&#xf…

探索React中的类组件和函数组件

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

每日一题leetcode-找出数组的第K大和

一.题目解析 读完题目后我们知道&#xff0c;该题就是让我们在子序列中求和&#xff0c;我们要在不同的子序列中排序找到第K大的和。何为子序列&#xff1f; 子序列就是在一个数组中抽出一些元素构成一个新的数组即可&#xff0c;不要求一定是连续的&#xff1b; 例如&#x…

深入解析汽车MCU的软件架构

一、背景知识 电动汽车&#xff08;EV&#xff09;正在成为首选的交通方式&#xff0c;为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中&#xff0c;众多电子控制单元&#xff08;ECU&#xff09;在确保其高效运行方面发挥着至关重要的作用…

《IAB视频广告标准:综合指南(2022)》之概述篇 - 我为什么要翻译介绍美国人工智能科技公司IAB 系列(2)

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

最优算法100例之03-判断是否是栈的弹出序列

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例…

20、电源管理入门之Hypervisor中的电源管理

目录 1. Hypervisor概念介绍 2. 汽车软件中的Hypervisor应用 3. QNX Hypervisor 4. Hypervisor中的多OS通信技术 5. 电源管理相关 参考: 很多时候听说Hypervisor,但是对底层软件技术不了解的人感觉挺神秘。本篇文章简单介绍下Hypervisor的基本概念,另外介绍下电影管理…

从零开始:神经网络(2)——MP模型

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 神经元相关知识&#xff0c;详见从零开始&#xff1a;神经网络——神经元和梯度下降-CSDN博客 1、什么是M-P 模型 人…

《剑指 Offer》专项突破版 - 面试题 76 : 数组中第 k 大的数字(C++ 实现)

目录 详解快速排序 面试题 76 : 数组中第 k 大的数字 详解快速排序 快速排序是一种非常高效的算法&#xff0c;从其名字可以看出这种排序算法最大的特点是快。当表现良好时&#xff0c;快速排序的速度比其他主要对手&#xff08;如归并排序&#xff09;快 2 ~ 3 倍。 快速排…

浏览器与Node.js事件循环:异同点及工作原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

记一次项目所学(中间件等)-动态提醒功能(RocketMQ)

记一次项目所学(中间件等&#xff09;–动态提醒功能&#xff08;RocketMQ&#xff09; 订阅发布模式与观察者模式 RocketMQ&#xff1a;纯java编写的开源消息中间件 高性能低延迟分布式事务 Redis : 高性能缓存工具&#xff0c;数据存储在内存中&#xff0c;读写速度非常快 …

Meta正打造一个巨型AI模型,旨在为其“整个视频生态系统”提供动力,一位高管透露

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Swift 入门学习:集合(Collection)类型趣谈-上

概览 集合的概念在任何编程语言中都占有重要的位置&#xff0c;正所谓&#xff1a;“古来聚散地&#xff0c;宿昔长荆棘&#xff1b;游人聚散中&#xff0c;一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理&#xff0c;怎能不让…

tcp流式服务和粘包问题

目录 1.概念 2.流式服务 3.粘包问题 1.概念 套接字是一个全双工的 使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写,双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输. TCP连接是全双工的,即双方的数据读写可以通过一个连接进行,完成…

【C语言】linux内核ip_local_out函数

一、讲解 这个函数 __ip_local_out 是 Linux 内核网络子系统中的函数&#xff0c;部分与本地出口的 IPv4 数据包发送相关。下面讲解这段代码的每一部分&#xff1a; 1. 函数声明 int __ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb)&#xff1a; -…