C/C++数组初始化
0 Xcode 10.1,编译器clang GNU14++
1、整型数组的初始化-栈初始化
//默认初始化
int a[5] = {}; //[0, 0, 0, 0, 0]
//全部初始化为0
int a[5] = {0}; //[0, 0, 0, 0, 0]
//c++11新写法
int a[5]{}; //[0, 0, 0, 0, 0]
//注意,想要整型数组 全部初始化为1的时候不能粗暴的设置为
int a[5] = {1}; //[1, 0, 0, 0, 0]
// 因为 数组初始化列表中的元素个数小于指定的数组长度时, 不足的元素以默认值填补。
//可以分别赋值
int a[5] = {1,1,1,1,1}; //[1,1,1,1,1]
2、字符串的初始化-栈初始化
和整型的初始化基本一致,会调用构造函数
string *str = string[5]; //调用5次默认构造函数
string *str1 = string[5]{"aaa"}; //数组中的第一个元素调用 string::string(const char *) 进行初始化。后面四个调用 默认构造函数
3、数组的默认初始化
如果不明确指出初始化列表,那么基本类型不会被初始化(全局变量和静态变量除外),所有内存都是脏数据;且自定义的类类型会为每个元素调用默认构造函数进行初始化
int a[5]{};
a[6]; //32766
a[10]; //1474921429
// Xcode会提示 Array index 10 is past the end of the array (which contains 5 elements)。虽然不会爆红,但是Xcode提示越界了。这在程序中也是需要特别注意的,越界时会取到脏数据。
string str[5]; //["","","","",""]
string str1[5] = {"","2","",""}; //["","2","',"",""]
string str2[5] = {"a"}; //["a","","","",""]
4、数组的堆初始化
int *a = new int[5]; //脏数据数组
int *str = new string[5]; //空字符串数组
int *b = new int[5]{0}; // [0,0,0,0,0]
int *str1 = new string[5] {"aaa"}; //["aaa","","","",""]
//以上几行代码遵循栈中数组的初始化规则,除此之外这里还有一个新语法
int *c = new int[5](); //[0,0,0,0,0]
//该语法后面的一对圆括号,表示使用默认值初始化整个数组,所以对于类类型来说,new string[5] 与 new string[5]() 是等价的,都会调用默认构造函数进行初始化;但是对于基本类型就不同了。new int[5]根本不会初始化,而new int[5]()则会使用int()的值,即0进行初始化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)