0

0

C++怎么使用指针数组_C++数组指针与指针数组区别【详解】

穿越時空

穿越時空

发布时间:2026-03-13 10:00:31

|

979人浏览过

|

来源于php中文网

原创

<p>指针数组声明为int arr[3],是含3个int指针的数组;初始化需用&x取地址或直接赋字符串字面量;传参时勿混淆char*与指针数组,须确保连续内存并显式传长度。</p>

c++怎么使用指针数组_c++数组指针与指针数组区别【详解】

怎么声明和初始化一个指针数组

指针数组本质是「数组」,每个元素都是指针。它解决的是“一堆同类型指针需要批量管理”的问题,比如保存多个字符串首地址、多个对象地址等。

常见错误是写成 int* arr[5] 却当成「指向数组的指针」来用,结果访问越界或解引用失败。

  • int* arr[3]:正确——3 个 int* 组成的数组,arr[0] 是指针,*arr[0] 才是 int 值
  • int (*arr)[3]:这是数组指针(指向含 3 个 int 的数组),完全不是一回事
  • 初始化时别漏掉取地址:如果想让 arr[0] 指向变量 x,得写 arr[0] = &x,不能写 arr[0] = x
  • 字符串字面量可直接赋: const char* names[] = {"Alice", "Bob", "Charlie"}; ——因为字面量在只读区,类型是 const char*

为什么 char* str_arr[4]char** p 传参时容易出错

函数参数里写 char** p 看起来能接收指针数组,但实际调用时必须确保内存布局一致:它只认「连续存放的指针」,不检查长度,也不懂你是不是真有一个数组。

典型崩溃场景:把单个 char* 变量的地址传给期望指针数组的函数,比如 func(&s) 传给 void func(char** arr),函数内部却按 arr[1] 访问,立刻越界。

立即学习C++免费学习笔记(深入)”;

触站AI
触站AI

专业的中文版AI绘画生成平台

下载
  • 安全做法:传指针数组时,显式传长度,例如 process_strings(str_arr, 4)
  • 函数内别假设 arr 后面还有有效指针;每次访问前检查索引是否 len
  • std::vector<char></char>std::vector<:string></:string> 更省心,尤其涉及增删时

指针数组和数组指针在 sizeof& 上表现完全不同

这是最常被编译器静默放过的坑:二者类型不同,导致 sizeof 结果差好几倍,取地址运算符 & 的行为也截然不同。

比如 int a[5]; int* p_arr[5]; int (*p_arr2)[5];

  • sizeof(p_arr)5 * sizeof(int*)(通常是 40 字节);而 sizeof(p_arr2)sizeof(int[5])(20 字节)
  • &p_arr 类型是 int**[5] 的地址?不对——是 int* (*)[5];而 &p_arr2int (*(*)[5])[5],极其绕,几乎没人手动写
  • auto 推导可避开手写类型: auto ptr_to_arr = &p_arr; 编译器自己算对

用指针数组管理动态分配的二维数组时,释放内存必须逐层操作

如果你用指针数组模拟二维数组(如 int** mat = new int*[rows]; for(...) mat[i] = new int[cols];),那释放时不能只 delete[] mat ——这只会释放指针数组本身,底下每行堆内存都泄漏了。

  • 必须先循环 delete[] mat[i],再 delete[] mat
  • 顺序反了会崩:先 delete[] mat 再去 delete[] mat[0] 就是野指针操作
  • 更稳的方式是用 std::vector<:vector>></:vector>,或者单块内存 + 指针数组映射:int* data = new int[rows * cols]; int** mat = new int*[rows]; for(...) mat[i] = data + i * cols;,这样只需两次 delete[]

指针数组本身不管理所指内存的生命周期,这点从定义上就决定了——它只是个装地址的盒子,盒子里的纸条撕没撕,得你自己盯紧。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

150

2025.10.17

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.2万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号