0

0

c++中如何定义多维数组_c++二维数组定义与遍历【基础】

尼克

尼克

发布时间:2026-03-17 21:23:03

|

863人浏览过

|

来源于php中文网

原创

int arr3是连续内存块而非嵌套指针,按行优先布局,访问arri等价于((int)arr + i4 + j);类型为int()[4],非int**;传参需指定列数,sizeof在函数内退化为指针大小。

c++中如何定义多维数组_c++二维数组定义与遍历【基础】

int arr[3][4] 定义二维数组,不是“嵌套指针”

很多人以为 int arr[3][4] 是“指向指针的指针”,其实它是连续一块内存,总长 12 个 int。编译器靠行优先(row-major)布局算下标:访问 arr[i][j] 实际等价于 *((int*)arr + i * 4 + j)

常见错误现象:int** ptr = arr; 编译失败 —— 类型不匹配,int (*)[4]int** 完全不同。

  • 定义时必须指定除最外层外的所有维度大小,int arr[][4] 合法(可由初始化推导行数),但 int arr[][] 非法
  • 传参给函数时,形参必须写成 void f(int arr[][4], int rows)void f(int (*arr)[4], int rows),不能只写 int** arr
  • sizeof(arr) 能拿到整个数组字节数(如 48),但传进函数后退化为指针,sizeof 就只剩指针大小了

遍历时别把 ij 写反,尤其和 vector<vector>></vector> 混用时

原生二维数组是“行主序”,arr[i][j] 表示第 i 行、第 j 列。但有人从 vector<vector>></vector> 过来,习惯先 for (auto& row : vec),再 for (auto& x : row),一换回原生数组就容易把循环顺序搞反,导致逻辑错乱或越界。

典型错误场景:图像处理中按列优先读取像素,却用 for (j) for (i) 遍历 arr[i][j],缓存不友好且结果颠倒。

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

  • 推荐统一用 for (int i = 0; i 外层控行,<code>for (int j = 0; j 内层控列
  • 如果真要列优先访问,确保你清楚这是在牺牲局部性;现代 CPU 对行顺序访问有预取优化
  • 不要为了“看起来像 vector”而写 for (int i = 0; i —— 下标语义混乱,维护成本高

new int[3][4] 不合法,动态二维数组得用一维模拟或 new int*[3]

C++ 不支持直接 new int[rows][cols](除非 cols 是编译期常量,且语法是 new int[rows][4])。试图写 int (*p)[4] = new int[3][4]; 可行,但 rows 必须已知;若行数也动态,就得自己算偏移。

Elser AI
Elser AI

一站式AI动漫、短剧生成平台

下载

常见错误现象:int** p = new int*[n]; for (int i = 0; i 看似方便,实际内存不连续,<code>delete[] p 不能释放所有空间,必须逐行 delete[] p[i]delete[] p

  • 更安全的做法:用一维数组模拟二维,int* p = new int[rows * cols];,访问用 p[i * cols + j]
  • 若坚持用指针数组,务必配对释放:for (int i = 0; i
  • 注意:std::vector<:vector>></:vector> 虽灵活,但每行单独分配,不适合大数组或高性能场景

初始化 {}= {} 行为不同,零初始化别漏掉等号

局部变量 int arr[2][3]{}; 会零初始化(全 0),但 int arr[2][3]; 不初始化,内容随机;而 static int arr[2][3]; 即使没写 {} 也会自动零初始化。

最容易被忽略的是:写 int arr[2][3] = {}; 合法且清零,但 int arr[2][3] = {0}; 也清零(C++ 规则:显式初始化首元素为 0,则其余自动补 0),而 int arr[2][3] = {1}; 只设 arr[0][0] == 1,其余仍为 0 —— 这不是 bug,是标准行为。

  • 结构体/类中含二维数组成员时,构造函数初始化列表不能直接初始化数组,得靠 = {} 或在构造函数体内赋值
  • 全局或 static 数组未显式初始化,一定为 0;栈上数组未初始化,就是垃圾值,用前必须确认
  • memset(arr, 0, sizeof(arr)) 也能清零,但仅适用于 POD 类型,且不如 = {} 直观安全

事情说清了就结束。真正麻烦的从来不是怎么写出来,而是哪一层在管理内存、谁负责释放、下标是不是反着用了——这些地方一错,调试起来比定义本身花十倍时间。

热门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中文网学习。

1571

2023.10.24

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

530

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

204

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1091

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

620

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

356

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.11.23

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

7

2026.03.18

热门下载

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

精品课程

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

共94课时 | 11.6万人学习

C 教程
C 教程

共75课时 | 5.6万人学习

C++教程
C++教程

共115课时 | 22.5万人学习

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

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