讲师中心 微信公众号
AI工具推荐 视频效率加速

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

雨丽君_3510

雨丽君_3510

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

|

1019人浏览过

|

来源于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++免费学习笔记(深入)”;

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 安全做法:传指针数组时,显式传长度,例如 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_arr2 是 int (*(*)[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工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

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

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

6104

2023.10.24

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

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

3004

2024.02.23

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

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

1792

2025.10.17

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

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

2238

2023.09.20

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

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

1758

2023.08.03

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

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

2744

2023.09.04

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

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

6104

2023.10.24

字符串介绍
字符串介绍

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

5769

2023.11.24

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn