指针与数组的区别

10. 指针数组和数组指针详细区别 这里array是一个指针数组,存储 5 个int*类型的指针。内存分布与存储位置这里ptr是一个指向包含 5 个int元素的数组的指针。内存分布与存储位置。 阅读详情

在C/C++中,指针与数组在很多情况下是可以相互替换的,所以很容易让人产生一种错觉,认为二者是等价的,而实际上并非如此。

数组名对应着(注意不是指向)一块内存,每创建一个数组,就需要为其分配相应的内存,且其地址与容量在其生命周期内不可变,可以改变的是其内容(“地址不可变,内容可变”这一点跟指针常量很像,但依然不是指针)。

指针指向一块内存,但这块内存并不是因为这个指针分配的,只是这个指针刚好指向它而以,这个指针可以随时指向别的内存。

char a1[] = "hello";
char a2[] = "hello";
char *p1 = "hello";
char *p2 = "hello";
cout << "a1:" << (void*)a1 << endl;  // 0012FD78
cout << "a2:" << (void*)a2 << endl;  // 0012FD68
cout << "p1:" << (void*)p1 << endl;  // 0044DD74
cout << "p2:" << (void*)p2 << endl;  // 0044DD74

a1和a2是两个数组,系统为它们分别分配了内存(0012FD7、0012FD68),然后用“hello”进行初始化,所以它们分别对应着两块不同的内存。char a1[] = "hello" 实际上等价于如下代码:

char a1[] = {'h','e','l','l','o','\0'};

p1和p2是两个指针,它们都指向同一块内存(0044DD74),这块内存是为常量字符串“hello”分配的。

由于p1和p2指向的是常量字符串,所以对其内容进行修改是非法的,但可以使其指向别的内存:

p1[0] = 'H';     // compiler不能发现该错误,但运行时会发生runtime error
p1 = "Hello";    // ok,p1指向常量字符串“Hello”所对应的内存

但对于数组a1和a2,它们的内容是可变的,但不能改变其地址:

a1[0] = 'H';     // ok
a1 = a2;         // error, a1不能作为左值


指针和数组的别一个区别是sizeof运算符,sizeof作用于数组,结果是该数组所对应的内存的大小,sizeof作用于指针,结果是指针变量所占内存的大小:

cout << sizeof(a1) ;     // 6
cout << sizeof(p1);      // 4


需要特别注意的是,当数组作为函数参数时,会自动退化为同类型的指针。

在 C++中,指针数组与数组指针的区别 在上述代码中,先定义了一个普通数组 arr ,然后定义了指向该数组的数组指针 arrPtr;最后通过数组指针访问数组元素,通过指针数组访问它所指向的变量的值。1. 指针数组:本质上是一个数组,数组中的每个元素都是一个指针。也就是说,这个数组存储的是多个指针变量,这些指针可以指向不同的对象(比如不同的变量、数组等)。即它指向的是数组的首地址,通过这个指针可以操作整个数组。// 定义指针数组,数组中每个元素是一个指向int类型的指针。// 通过指针数组访问它所指向的变量的值。 阅读详情

相关推荐

Waymo数据集里的隐藏彩蛋:5个激光雷达数据融合实战(附Python代码)

本文深入解析Waymo数据集中5个激光雷达的数据融合技术,提供Python实战代码,帮助开发者掌握多传感器协同工作的关键方法。通过时间同步、坐标转换和运动补偿等技术,实现高精度3D场景重建,提升自动驾驶系统的环境感知能力。

weixin_30399821的博客 80

指针数组与数组指针的区别

a、指针数组:是指一个数组里面装着指针,也即指针数组是一个数组; 定义形式:int *a[10]; 如图所示: b、数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已; 定义形式:int (*p)[10]; 其中,由于[]的优先级高于*,所以必须添加(*p). 区分方法: 主要看后面的两个字是什么(前面是修饰作用),因此指针数组是数组,而数组指针是指针。 ...

汤姆鱼 5万+

ARM 汇编指令:LSL(逻辑左移) 和 LSR(逻辑右移)

ARM 汇编中的 LSL(逻辑左移)和 LSR(逻辑右移)是基础移位指令,分别实现二进制位的左移和右移操作。LSL 低位补0,等效于乘以2^n;LSR 高位补0,等效于无符号除以2^n。这两个指令可以单独使用或与其他指令结合(如ADD、MOV等),利用ARM的"桶形移位器"硬件实现高效运算。关键特性包括:移位范围0-31(LSL)或1-32(LSR),可选更新标志位,以及与其他指令结合时的无额外开销优势。LSR与ASR(算术右移)的主要区别在于高位填充方式,分别适用于无符号和有符号数处理

guigenyi的专栏 1810

【C语言】指针数组和数组指针的区别

的情况就更好理解了,在这里“()”的优先级比 “[ ]” 高,“ * ”号和 p2 构成一个指针的定义,指针变量名为 p2,int 修饰的是数组的内容,即数组的每个元素。p1 先与 “[]” 结合,构成一个数组的定义,数组名为 p1,int *修饰的是数组的内容,即数组的每个元素。指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在 32 位系统下任何类型的指针永远是占 4 个字节。指针数组可以说成是”指针的数组”,首先这个变量是一个数组。

猫猫的小茶馆 5831

SPARTAN6 + Verilog - FPGA step by step 从0开始学习(1)

SPARTAN6 + Verilog - FPGA step by step 从0开始学习(1)Step 1 软件安装Step 2 硬件获取Step 3 开始从头到脚建一个工程Step 3.1 新建一个工程 从0开始学习FPGA,最好的办法就是先建一个最简单的模块,并且跑起来,然后再慢慢展开。下面这个例子是要按照一定的周期点亮核心板上的一个led。 Step 1 软件安装 这个从0开始学习是用的xilinx的SPARTAN6。SPARTAN6集成开发环境用ISE,不能用Vivado,各自对应的版本不同。安装

xfacexx点点记录 5512

STM32F103+AX58100 EtherCAT从站SPI移植实战:CubeMX配置避坑指南

本文详细介绍了STM32F103与AX58100 EtherCAT从站控制器的SPI接口移植实战,重点解析CubeMX配置中的关键参数与常见陷阱。内容涵盖硬件连接规范、SPI模式设置、中断优先级规划及协议栈对接技巧,帮助开发者高效实现工业自动化领域的实时通信方案。特别强调CPOL/CPHA配置与AX58100的匹配要求,避免数据错位问题。

weixin_29230865的博客 331

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

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;        //将该二维数组...

weixin_34189116的博客 4990

泛微OA表单设计实战:如何快速实现自定义多选浏览框(附完整配置步骤)

本文详细介绍了在泛微OA中快速实现自定义多选浏览框的完整配置步骤。针对招聘提报、活动审批等需要从海量数据中规范选择多个条目的业务场景,文章从理解需求、构建数据源、设计查询页面到创建浏览框控件,提供了清晰的实战指南,帮助开发者高效解决复杂数据选择难题,提升表单操作体验。

yog99的博客 1049

指针数组、数组指针、数组的区别与联系

指针数组、数组指针、数组的区别与联系! 一:基本定义 1.指针数组 char *arr[4] = {"hello", "world", "shannxi", "xian"}; //arr就是我定义的一个指针数组,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。 (1)这个指针数组有......

魏波 1万+

AI产品经理面试宝典第9天:关于AI产品经理的挑战与转型怎么回答

AI技术重构产品逻辑,AI产品经理需直面三大核心命题:用户定位差异、技术融合边界、商业价值转化。本文从千道真题中提炼出面试高频考点,剖析AI产品经理如何突破传统思维定式,在B端需求与C端体验间构建价值桥梁,用数据驱动产品创新,破解技术落地的隐性壁垒。掌握这三重跃迁法则,助你在AI浪潮中脱颖而出。

打造全国最全的AI Agent开发知识领域的博客 175

23、管状剪纸结构的研究与功能生成连杆机构的综合设计

本文研究了管状剪纸结构的压缩运动特性,通过剪纸技术将非刚性可折叠的Yoshimura和Kresling折纸结构转化为刚性可折叠结构,并提出径向可闭合剪纸(RC-kiri)构型。推导了位移与折叠角之间的数学关系,设计了带外部LET接头的RC-kiri模型,建立了力-位移理论模型并通过Abaqus进行有限元验证,制作了3D打印物理模型以测量直径变化。同时,研究了四杆和六杆功能生成连杆机构的综合设计方法,基于负闭合运动链和最小二乘法实现函数生成。结果表明理论、仿真与实验整体吻合良好,误差来源得到分析,为机器人、机

nokia的博客 167

数组指针与指针数组的区别

int* p[5];[]优先级高于,表示p是一个数组;该数组有 5 个元素,每个元素是int*类型,即指向int的指针;本质:是一个包含多个指针变量的数组。

陈子青的博客 667

基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为智能电网关键设备,其三级架构(AC-DC整流、DC-DC隔离、DC-AC逆变)存在级间耦合问题。文章提出纵向解耦与横向联动相结合的协同控制策略,详细推导了各级控制算法,并通过Simulink实现了10kV/400V级联型SST系统建模。仿真结果显示,在±20%电网波动和0-100%负载跳变下,系统能保持直流母线电压波动<2%。文章还提供了工程部署建议和代码生成方法,为SST的研发提供了实用指导。

amy_mhd的博客 301

数组与指针的区别

(1)空间分配 指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。而数组是静态分配空间,在全局变量区或者栈 上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。 (2)访问效率 指针是通过地址间接访问,而数组是直接访问数值。因此指针的访问效率低,数组的访问效率高。

qq_36992917的博客 9790

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

指针与数组的区别与联系

一.指针与数组的联系: 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: 1  char str[20], *ptr; 2 3   ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这

qq_51882068的博客 5310

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

数组指针和指针数组且听之类似,实际完全不同。数组指针意在“指针”,强调的是指针,即“指向数组的指针”;指针数组意在“数组”,强调的是数组,即“成员都是指针的数组”。

uxlike的博客 9172

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

彻底理解数组指针和指针数组的区别

数组指针:本质是一个指针,指向了一个数组指针数组:本质是一个数组,该数组中的每个元素都是一个指针。

实践出真理,接毕设/课设项目开发指导 1万+

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

在学习到数组指针这个地方,听到有人在讨论数组指针和二级指针有什么区别,这里我谈一下我自己的见解。 首先数组指针是用来存储数组的地址的 上图所示,p就是一个数组指针,但是在使用的时候发现,对p解引用并不是得到数组的首元素,而是数组首元素的地址。 这个有的人就会犯疑问,如果数组指针和其他类型的指针一样,解引用应该会拿到数组首元素的值才对。为什么解引用两次才会拿到首元素的值,那这样不就和二级指针是一样的吗。 但其实我认为数组指针和二级指针只是用法相同,但是本质上是不一样的。二级指针存储的是变量的地址的地址,而

qq_41490958的博客 3762
上一篇: 算法之动态规划(LCS最长公共子序列, edit distance,交叉子串)
下一篇: KMP算法
mwill
博客等级 码龄19年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值