当前位置: 首页 > news >正文

数组指针和指针数组的区别

数组指针和指针数组的区别

根据我个人的理解如下:

数组指针:指向数组的指针。着重点在于最后的指针两个字。

指针数组: 所有元素都是指针的数组。着重点在于最后的数组两个字。

另外来看助手的回答:

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");

由此可以证明:豆包的解释是更加正确的,也和我个人理解相同。

相关文章:

数组指针和指针数组的区别

数组指针和指针数组的区别 根据我个人的理解如下&#xff1a; 数组指针&#xff1a;指向数组的指针。着重点在于最后的指针两个字。 指针数组&#xff1a; 所有元素都是指针的数组。着重点在于最后的数组两个字。 另外来看助手的回答: Kimi: 1. **数组指针&#xff08;Ar…...

【VUE点击父组件按钮,跳转到子组件】

要实现在Vue中&#xff0c;父组件通过点击按钮进入子组件的 <el-dialog> 弹窗&#xff0c;并在弹窗中嵌套 <el-table> 表格&#xff0c;可以按照以下步骤进行编写代码&#xff1a; 在父组件中&#xff0c;定义一个数据属性用于控制子组件弹窗的显示与隐藏。 data…...

Java列表排序:方法与实践

在Java编程中&#xff0c;列表排序是一个常见且重要的任务。本文将介绍Java中对列表进行排序的几种方法&#xff0c;包括使用Collections.sort()、List.sort()以及自定义排序规则。 1. 使用Collections.sort() Collections.sort()是Java提供的一个静态方法&#xff0c;用于对…...

哈希及其封装实现unordermap和set

哈希 直接定址法 哈希和之前的红黑树的区别就是&#xff0c;它是通过映射关系来找到目标的&#xff0c;可以把它想象成之前排序的计数排序&#xff0c;那其实就是哈希的一种方法&#xff0c;叫做直接定址法。 对于比较集中的数据&#xff0c;它只需要开一段区间&#xff0c;…...

在 AMD GPU 上构建解码器 Transformer 模型

Building a decoder transformer model on AMD GPU(s) — ROCm Blogs 2024年3月12日 作者 Phillip Dang. 在这篇博客中&#xff0c;我们展示了如何使用 PyTorch 2.0 和 ROCm 在单个节点上的单个和多个 AMD GPU 上运行Andrej Karpathy’s beautiful PyTorch re-implementation …...

Canvas简历编辑器-选中绘制与拖拽多选交互设计

Canvas简历编辑器-选中绘制与拖拽多选交互设计 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM&#xff0c;并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计。那么此时我们就依然在轻量级DOM的基础上&#xff0c;关注于实现选中绘制与拖拽多选交…...

简单工厂(Simple Factory)

简单工厂&#xff08;Simple Factory&#xff09; 在创建一个对象时不向客户暴露内部细节&#xff0c;并提供一个创建对象的通用接口。 说明&#xff1a; 简单工厂把实例化的操作单独放到一个类中&#xff0c;这个类就成为简单工厂类&#xff0c;让简单工厂类来决定应该用哪…...

ffmpeg拉流分段存储到文件-笔记

通过ffmpeg可以从rtsp网络流拉取数据并存储到本地文件里&#xff0c;如下命令。做个笔记 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 流中捕获视频&#xff…...

Java 实习工资大概是多少?——解读影响薪资的因素

文章目录 1. 城市因素&#xff1a;一线、二线的差距2. 公司类型&#xff1a;互联网公司、外企和传统企业的差别3. 个人能力&#xff1a;经验、技术栈的重要性4. 其他影响因素&#xff1a;学历和实习时间总结推荐阅读文章 Java 开发作为广泛应用的职业方向&#xff0c;实习工资的…...

【Linux】万字详解:Linux文件系统与软硬链接

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 &#x1f680; 前言 一&#xff1a; &#x1f525; 磁盘的物理结构二&#xff1a; &#x1f525; 磁盘的存储结构 三&#xff1a; &#x1f525; 磁盘的逻辑结构 四&#xff1a; &#…...

spacenavd

介绍spacenavd开源项目&#xff0c;主要是因为在斯坦福大学的UMI项目中使用了该项目。在斯坦福大学的 UMI&#xff08;Universal Manipulation Interface&#xff09;项目中&#xff0c;Spacenavd 主要用于处理 3D Space Mouse&#xff08;空间鼠标&#xff09;的输入&#xf…...

C#WPF的XAML的语法详谈和特性

WPF的XAML&#xff08;eXtensible Application Markup Language&#xff09;是一种基于XML的标记语言&#xff0c;用于在.NET框架中定义和描述用户界面。XAML提供了一种声明性的方式来构建应用程序的UI元素&#xff0c;包括窗口、控件、布局、样式、动画和数据绑定等。 XAML的…...

一篇文章讲透数据结构之二叉搜索树

前言 在前面的学习过程中&#xff0c;我们已经学习了二叉树的相关知识。在这里我们再使用C来实现一些比较难的数据结构。 这篇文章用来实现二叉搜索树。 一.二叉搜索树 1.1二叉搜索树的定义 二叉搜索树&#xff08;Binary Search Tree&#xff09;是基于二叉树的一种升级版…...

新手入门c++(8)

到时候了&#xff0c;是时候给你们讲一下其他的定义形式与格式化输入输出了。 1.长整型变量 长整型变量分为两种&#xff1a; ①long类型 在计算机编程中&#xff0c;long 类型是一个整型数据类型&#xff0c;用于存储较大的整数。它的大小和范围取决于操作系统和编译器的实…...

新手铲屎官提问,有哪几款噪音低的宠物空气净化器推荐

相信很多铲屎官都明白的的痛就是猫咪掉毛太严重&#xff0c;所以每次看到满天飞的浮毛时只想赶紧逃离&#xff0c;一点都不想清理。但是家是自己的&#xff0c;猫是自己的&#xff0c;健康也是自己的&#xff0c;不清理也得清理。 为了更有效的清理浮毛&#xff0c;我朋友特意…...

解决RabbitMQ脑裂问题

文章目录 前言一、现象二、解决办法 前言 RabbitMQ脑裂 一、现象 RabbitMQ镜像群出现脑裂现象&#xff0c;各个节点的MQ实例都“各自为政”&#xff0c;数据并不同步。 二、解决办法 # 停止mq sh rabbitmq-server stop_app # 查看mq进程是否存在 ps -ef | grep rabbitmq # …...

经纬恒润AUTOSAR成功适配芯钛科技Alioth TTA8车规级芯片

在汽车电子领域&#xff0c;功能安全扮演着守护者的角色&#xff0c;它确保了车辆在复杂多变的情况下保持稳定可靠的运行。随着汽车电子的复杂性增加&#xff0c;市场对产品功能安全的要求也日益提高。基于此背景&#xff0c;经纬恒润AUTOSAR基础软件产品INTEWORK-EAS-CP成功适…...

4、java random随机数、一维数组、二维数组

目录 Random类与随机数生成数组的概述与使用数组的内存分配与访问数组的常见问题与解决方案一维数组的遍历与操作二维数组的概述与遍历1. Random类与随机数生成 引言 在编程中,我们经常需要生成随机数,比如在游戏、模拟实验或者数据处理中。Java提供了一个非常方便的类Rand…...

C++ 魔法三钥:解锁高效编程的封装、继承与多态

快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 目录 &#x1f4af;前言 &#x1f4af;封装 1.封装概念 2.封装格式 3.封装的原理 4.封装的作用 &#x1f4af;继承 1.继承的概念 2.继承格式 3.继承的…...

姿态传感器(学习笔记上)

上节我们学的是温湿传感器&#xff0c;这节我们学的是姿态传感器&#xff0c;虽然都是传感器&#xff0c;但是它们还是有很大的区别的&#xff0c;这节的传感器我们通过学习可知&#xff0c;开发板上的姿态传感器型号是QMI8658C&#xff0c;内部集成3轴加速度传感器和3轴陀螺仪…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...