数组指针和指针数组的区别
数组指针和指针数组的区别
根据我个人的理解如下:
数组指针:指向数组的指针。着重点在于最后的指针两个字。
指针数组: 所有元素都是指针的数组。着重点在于最后的数组两个字。
另外来看助手的回答:
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轴陀螺仪…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...