数组指针和指针数组的区别
数组指针和指针数组的区别
根据我个人的理解如下:
数组指针:指向数组的指针。着重点在于最后的指针两个字。
指针数组: 所有元素都是指针的数组。着重点在于最后的数组两个字。
另外来看助手的回答:
Kimi:
1. **数组指针(Array of Pointers)**:- 这是指一个指针数组,即一个数组,其元素都是指针。- 声明方式:`类型指针 *指针数组名[数组大小];`- 例如:`int *array[10];` 这里`array`是一个包含10个`int`类型指针的数组。
2. **指针数组(Pointer to an Array)**:- 这是指一个指向数组的指针,即一个指针,它指向一个数组。- 声明方式:`类型指针 (*指针名)[数组大小];`- 例如:`int (*pArray)[10];` 这里`pArray`是一个指针,它指向一个有10个`int`类型元素的数组。它们之间的主要区别包括:- **内存分配**:- 数组指针(Array of Pointers):每个指针单独分配内存,它们可以指向不同大小的数组。- 指针数组(Pointer to an Array):整个数组作为一个整体被分配内存,指针指向这个数组的开始。
- **初始化**:- 数组指针(Array of Pointers):可以单独初始化每个指针。- 指针数组(Pointer to an Array):初始化时需要一个指向数组的指针。
- **使用**:- 数组指针(Array of Pointers):通过`指针数组名[index]`访问指针,然后通过`*指针数组名[index]`访问指向的数据。- 指针数组(Pointer to an Array):通过`(*指针名)[index]`直接访问数组中的元素。
- **内存连续性**:- 数组指针(Array of Pointers):指针数组中的指针不一定指向连续的内存区域。- 指针数组(Pointer to an Array):指针指向的数组中的元素是连续存放在内存中的。
抖音旗下的豆包:
豆包:
数组指针:是一个指针,它指向一个数组。可以理解为这个指针保存的是整个数组在内存中的起始地址。例如,对于一个包含多个元素的数组int arr[5];,int (*p)[5];就是一个数组指针,p可以指向arr。
指针数组:是一个数组,这个数组的元素是指针。例如int *p[5];,这里定义了一个数组p,它有 5 个元素,每个元素都是一个int *类型的指针。
定义方式
数组指针:
语法为类型 (*指针变量名)[数组大小];。例如,double (*ptr)[3];定义了一个指针ptr,它可以指向一个包含 3 个double类型元素的数组。
一般在处理二维数组时较为常用。例如,对于二维数组int a[2][3];,可以定义一个数组指针int (*p)[3] = a;,这里p指向二维数组a的第一行(因为二维数组在内存中是按行存储的,a的第一行可以看作是一个包含 3 个int元素的数组)。
指针数组:
语法为类型 *指针数组名[数组大小];。如char *str_array[4];,这表示str_array是一个数组,有 4 个元素,每个元素都是一个指向char类型的指针。
常用于存储多个字符串(C 语言中字符串实际上是字符数组,而字符串的名字是指向字符数组首元素的指针)。例如,可以用指针数组来存储多个字符串字面量:char *weekdays[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};。
内存占用和存储内容
数组指针:
占用的内存空间大小通常和机器字长有关,在 32 位机器上一般是 4 字节,在 64 位机器上一般是 8 字节。它存储的是数组的首地址,通过这个指针结合偏移量可以访问数组中的各个元素。
例如,对于数组int arr[5];,如果数组指针p指向arr,那么*(p + 1)就可以访问arr[1](假设p是正确定义和初始化的数组指针)。
指针数组:
内存占用空间为数组元素个数乘以每个元素(指针)所占用的空间。例如,在 32 位机器上,int *p[5]占用5 * 4 = 20字节。
存储的是多个指针,每个指针可以指向不同的内存地址。例如,在上面的weekdays指针数组中,每个元素分别指向一个字符串字面量在内存中的起始位置。
下面直接用代码来说明助手谁是正确的呢:
1.数组指针
// 定义一个含有10个元素的int 数组int a1[10] = { 0,1,2,3,4,5,6,7,8,9 };
// 数组指针:指向数组的指针
// 定义一个指针p,该指针指向一个含有10个int元素的数组int (*p)[10];
// 指针p指向a1;p = &a1;cout << "数组指针输出指针所指向的那个数组的元素" << endl;for (int i = 0; i < 10; i++){// (*p): 即a1,(*p)[i]:即a1[i];std::cout << (*p)[i] << std::endl;}
2.指针数组
// 指针数组:数组的每个元素都是一个指针// pArr是一个数组,含有10个int* ,并且初始化为数组a1各元素的地址int* pArr[10] = { &a1[0],&a1[1],&a1[2],&a1[3],&a1[4],&a1[5],&a1[6],&a1[7],&a1[8],&a1[9]};for (int i=0;i < 10;i++){// pArr[i]:是指针,指向a1的各个元素;*(pArr[i]):对指针解引用,即获取指针指向的值。std::cout << *(pArr[i]) << std::endl;}
上面的代码运行结果如下:

总代码如下:
// 数组指针:指向数组的指针int a1[10] = { 0,1,2,3,4,5,6,7,8,9 };int (*p)[10];p = &a1;cout << "数组指针输出指针所指向的那个数组的元素" << endl;for (int i = 0; i < 10; i++){std::cout << (*p)[i] << std::endl;}cout << "输出指针数组中数组元素指向的数组的值" << endl;// 指针数组:数组的每个元素都是一个指针int* pArr[10] = { &a1[0],&a1[1],&a1[2],&a1[3],&a1[4],&a1[5],&a1[6],&a1[7],&a1[8],&a1[9]};for (int i=0;i < 10;i++){std::cout << *(pArr[i]) << std::endl;}system("pause");
由此可以证明:豆包的解释是更加正确的,也和我个人理解相同。
相关文章:
数组指针和指针数组的区别
数组指针和指针数组的区别 根据我个人的理解如下: 数组指针:指向数组的指针。着重点在于最后的指针两个字。 指针数组: 所有元素都是指针的数组。着重点在于最后的数组两个字。 另外来看助手的回答: Kimi: 1. **数组指针(Ar…...
【VUE点击父组件按钮,跳转到子组件】
要实现在Vue中,父组件通过点击按钮进入子组件的 <el-dialog> 弹窗,并在弹窗中嵌套 <el-table> 表格,可以按照以下步骤进行编写代码: 在父组件中,定义一个数据属性用于控制子组件弹窗的显示与隐藏。 data…...
Java列表排序:方法与实践
在Java编程中,列表排序是一个常见且重要的任务。本文将介绍Java中对列表进行排序的几种方法,包括使用Collections.sort()、List.sort()以及自定义排序规则。 1. 使用Collections.sort() Collections.sort()是Java提供的一个静态方法,用于对…...
哈希及其封装实现unordermap和set
哈希 直接定址法 哈希和之前的红黑树的区别就是,它是通过映射关系来找到目标的,可以把它想象成之前排序的计数排序,那其实就是哈希的一种方法,叫做直接定址法。 对于比较集中的数据,它只需要开一段区间,…...
在 AMD GPU 上构建解码器 Transformer 模型
Building a decoder transformer model on AMD GPU(s) — ROCm Blogs 2024年3月12日 作者 Phillip Dang. 在这篇博客中,我们展示了如何使用 PyTorch 2.0 和 ROCm 在单个节点上的单个和多个 AMD GPU 上运行Andrej Karpathy’s beautiful PyTorch re-implementation …...
Canvas简历编辑器-选中绘制与拖拽多选交互设计
Canvas简历编辑器-选中绘制与拖拽多选交互设计 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM,并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计。那么此时我们就依然在轻量级DOM的基础上,关注于实现选中绘制与拖拽多选交…...
简单工厂(Simple Factory)
简单工厂(Simple Factory) 在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 说明: 简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪…...
ffmpeg拉流分段存储到文件-笔记
通过ffmpeg可以从rtsp网络流拉取数据并存储到本地文件里,如下命令。做个笔记 ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.168:6880/live -c copy -f segment -segment_time 60 stream_piece_%d.mp4这条 ffmpeg 命令的作用是从一个 RTSP 流中捕获视频ÿ…...
Java 实习工资大概是多少?——解读影响薪资的因素
文章目录 1. 城市因素:一线、二线的差距2. 公司类型:互联网公司、外企和传统企业的差别3. 个人能力:经验、技术栈的重要性4. 其他影响因素:学历和实习时间总结推荐阅读文章 Java 开发作为广泛应用的职业方向,实习工资的…...
【Linux】万字详解:Linux文件系统与软硬链接
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 🚀 前言 一: 🔥 磁盘的物理结构二: 🔥 磁盘的存储结构 三: 🔥 磁盘的逻辑结构 四: &#…...
spacenavd
介绍spacenavd开源项目,主要是因为在斯坦福大学的UMI项目中使用了该项目。在斯坦福大学的 UMI(Universal Manipulation Interface)项目中,Spacenavd 主要用于处理 3D Space Mouse(空间鼠标)的输入…...
C#WPF的XAML的语法详谈和特性
WPF的XAML(eXtensible Application Markup Language)是一种基于XML的标记语言,用于在.NET框架中定义和描述用户界面。XAML提供了一种声明性的方式来构建应用程序的UI元素,包括窗口、控件、布局、样式、动画和数据绑定等。 XAML的…...
一篇文章讲透数据结构之二叉搜索树
前言 在前面的学习过程中,我们已经学习了二叉树的相关知识。在这里我们再使用C来实现一些比较难的数据结构。 这篇文章用来实现二叉搜索树。 一.二叉搜索树 1.1二叉搜索树的定义 二叉搜索树(Binary Search Tree)是基于二叉树的一种升级版…...
新手入门c++(8)
到时候了,是时候给你们讲一下其他的定义形式与格式化输入输出了。 1.长整型变量 长整型变量分为两种: ①long类型 在计算机编程中,long 类型是一个整型数据类型,用于存储较大的整数。它的大小和范围取决于操作系统和编译器的实…...
新手铲屎官提问,有哪几款噪音低的宠物空气净化器推荐
相信很多铲屎官都明白的的痛就是猫咪掉毛太严重,所以每次看到满天飞的浮毛时只想赶紧逃离,一点都不想清理。但是家是自己的,猫是自己的,健康也是自己的,不清理也得清理。 为了更有效的清理浮毛,我朋友特意…...
解决RabbitMQ脑裂问题
文章目录 前言一、现象二、解决办法 前言 RabbitMQ脑裂 一、现象 RabbitMQ镜像群出现脑裂现象,各个节点的MQ实例都“各自为政”,数据并不同步。 二、解决办法 # 停止mq sh rabbitmq-server stop_app # 查看mq进程是否存在 ps -ef | grep rabbitmq # …...
经纬恒润AUTOSAR成功适配芯钛科技Alioth TTA8车规级芯片
在汽车电子领域,功能安全扮演着守护者的角色,它确保了车辆在复杂多变的情况下保持稳定可靠的运行。随着汽车电子的复杂性增加,市场对产品功能安全的要求也日益提高。基于此背景,经纬恒润AUTOSAR基础软件产品INTEWORK-EAS-CP成功适…...
4、java random随机数、一维数组、二维数组
目录 Random类与随机数生成数组的概述与使用数组的内存分配与访问数组的常见问题与解决方案一维数组的遍历与操作二维数组的概述与遍历1. Random类与随机数生成 引言 在编程中,我们经常需要生成随机数,比如在游戏、模拟实验或者数据处理中。Java提供了一个非常方便的类Rand…...
C++ 魔法三钥:解锁高效编程的封装、继承与多态
快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 目录 💯前言 💯封装 1.封装概念 2.封装格式 3.封装的原理 4.封装的作用 💯继承 1.继承的概念 2.继承格式 3.继承的…...
姿态传感器(学习笔记上)
上节我们学的是温湿传感器,这节我们学的是姿态传感器,虽然都是传感器,但是它们还是有很大的区别的,这节的传感器我们通过学习可知,开发板上的姿态传感器型号是QMI8658C,内部集成3轴加速度传感器和3轴陀螺仪…...
私域数据安全与合规——企微引流必须注意的5个技术红线
做公域引流到企微,数据安全和合规是技术团队必须重视的问题。一旦踩红线,轻则功能受限,重则企微封禁甚至法律风险。今天梳理5个技术红线及应对方案。红线1:用户隐私数据存储企微API返回的用户信息包含ExternalUserID(外…...
STM32F407的RTC时钟不准?手把手教你用CubeMX配置LSE晶振校准(附源码)
STM32F407的RTC时钟不准?手把手教你用CubeMX配置LSE晶振校准(附源码) 在嵌入式系统开发中,实时时钟(RTC)的精度问题常常让开发者头疼。特别是使用STM32F407这类主流单片机时,即使按照官方文档配…...
终极OpenCore EFI自动化配置指南:OpCore-Simplify让你15分钟完成专业级黑苹果配置
终极OpenCore EFI自动化配置指南:OpCore-Simplify让你15分钟完成专业级黑苹果配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复…...
Ostrakon-VL像素UI设计细节:16色限定调色板与可访问性对比度达标
Ostrakon-VL像素UI设计细节:16色限定调色板与可访问性对比度达标 1. 项目背景与设计理念 1.1 从工业UI到像素艺术的转变 在零售与餐饮行业的AI应用场景中,传统工业级UI往往给人冰冷、复杂的印象。Ostrakon-VL扫描终端大胆采用8-bit复古像素风格&#…...
计算机毕业设计springboot月子中心信息管理系统 基于SpringBoot的产后护理中心数字化管理平台 Java母婴康复会所智能服务系统
计算机毕业设计springboot月子中心信息管理系统915bg9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着现代社会生活节奏的加快与家庭结构的变化,越来越多的产妇选…...
光模块技术解析:从封装到以太网标准的全面指南
1. 光模块的封装类型与演进 第一次拆开数据中心机柜时,我看到那些花花绿绿的光模块插在交换机上,像极了乐高积木。后来才知道,这些"积木"的形态差异背后是封装技术的迭代史。目前主流的光模块封装类型可以分成三代产品:…...
终极指南:深度实战OpenCore Legacy Patcher让老旧Mac重获新生
终极指南:深度实战OpenCore Legacy Patcher让老旧Mac重获新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款革命…...
EC2Instances.info未来发展规划:AI驱动的智能实例推荐系统
EC2Instances.info未来发展规划:AI驱动的智能实例推荐系统 【免费下载链接】ec2instances.info Amazon EC2 instance comparison site 项目地址: https://gitcode.com/gh_mirrors/ec/ec2instances.info EC2Instances.info作为专业的Amazon EC2实例比较平台&a…...
技术人终身学习:2026年软件测试从业者必跟的5个播客
在技术迭代日新月异的今天,终身学习已不再是可选项,而是软件测试从业者保持竞争力的生存法则。碎片化的时间如何转化为系统性的认知升级?深度思考如何突破日常工作环境的局限?播客,以其伴随性强、信息密度高、视角多元…...
5步快速上手:百度网盘直链解析工具实现高速下载
5步快速上手:百度网盘直链解析工具实现高速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度限制而烦恼吗?百度网盘直链解…...
