0

0

C++怎么初始化数组 C++数组清零的三种快捷写法【基础】

尼克

尼克

发布时间:2026-03-11 19:14:02

|

578人浏览过

|

来源于php中文网

原创

最安全初始化方式是std::array a = {};或std::vector v(1000);,前者全零且编译期检查,后者自动管理内存;裸数组用int arr[100] = {};,动态数组用std::fill或new int[n]();。

c++怎么初始化数组 c++数组清零的三种快捷写法【基础】

std::array 初始化时直接列表赋值最安全

现代 C++ 推荐优先用 std::array 替代裸数组,初始化清晰且不会退化为指针。它支持聚合初始化,编译期检查长度,还能自动推导类型。

常见错误是写成 std::array<int> a = {0};</int>——这只会初始化第一个元素为 0,其余未定义(不是清零)。必须显式写出全部初始值或用空花括号。

  • std::array<int> a = {}; // 全零初始化,推荐</int>
  • std::array<int> b{1, 2, 3}; // 显式赋值</int>
  • 别写 std::array<int> c = {0};</int>,后两个元素值不确定

裸数组用 memset 清零要小心类型和范围

memset 快但危险:它按字节填充,只适合 POD 类型(如 intchar),对含构造函数或虚函数的类会破坏对象状态。

另一个坑是传错大小:用 sizeof(arr) 没问题,但若传入指针(比如函数参数),sizeof 就失效了,结果是只清了指针本身(8 字节)。

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

皮卡智能
皮卡智能

AI驱动高效视觉设计平台

下载
  • int arr[100] = {}; // 编译期清零,最简单,推荐用于栈数组
  • memset(arr, 0, sizeof(arr)); // 正确:arr 是数组名,sizeof 有效
  • memset(ptr, 0, n * sizeof(*ptr)); // 函数内清零指针,必须手动算大小
  • 别对 std::string 数组或自定义类数组用 memset

动态数组(new int[n])必须用 std::fill 或循环

new[] 分配的数组不能靠 = {} 初始化,也不能直接用 memset(除非你确认类型安全且记得除以 sizeof(int))。更现代、更明确的做法是用 std::fill

性能上,std::fillmemset 在优化后通常一样快,但它语义清晰、类型安全、可读性高。

  • int* p = new int[1000]; std::fill(p, p + 1000, 0); // 推荐
  • int* q = new int[1000](); // 注意小括号:带 () 才能值初始化为 0
  • 别写 new int[1000]{} —— C++11 起语法允许,但部分老编译器不支持
  • 用完记得 delete[] p;,漏掉就是内存泄漏

std::vector 初始化比裸数组省心得多

除非有硬性性能/内存布局要求,否则直接用 std::vector。它默认构造就清零(对于 int 等内置类型),且能自动管理生命周期。

注意:std::vector<int>(n)</int>std::vector<int>(n, 0)</int> 效果一样,都是 n 个 0;但 std::vector<int> v(n)</int> 在声明时就完成初始化,不额外调用 fillmemset

  • std::vector<int> v(1000); // 全 0,安全、简洁、无内存管理负担</int>
  • v.assign(1000, 0); // 运行时重置为全 0
  • 避免 vector<char> buf(1024); memset(&buf[0], 0, buf.size());</char> —— 多余且易出错

真正容易被忽略的是:数组是否在栈上、是否是 POD 类型、是否会被传递进函数——这三个条件一变,初始化方式就得跟着换。没想清楚这点,再“快捷”的写法都可能埋雷。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
string转int
string转int

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

1010

2023.08.02

string转int
string转int

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

1010

2023.08.02

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

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

610

2024.08.29

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

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

334

2025.08.29

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

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

235

2025.08.29

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

287

2023.11.13

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共94课时 | 11.1万人学习

C 教程
C 教程

共75课时 | 5.3万人学习

C++教程
C++教程

共115课时 | 21.4万人学习

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

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