<p>数组初始化在定义时分配固定内存且大小不可变,如int arr[] = {1,2,3};指针初始化可指向变量、动态内存或空地址,如int* ptr = new int(5);二者本质不同:数组名是常量地址,sizeof返回总字节数,而指针是变量,可重新赋值,sizeof仅返回指针大小,且需手动管理动态内存。</p>

在C++中,数组和指针虽然在某些场景下表现相似,但它们的初始化方式存在本质区别。理解这些差异有助于避免常见错误,并写出更安全、清晰的代码。
数组的大小和内容在定义时通常需要明确,初始化发生在编译期或对象构造期,且不能更改其大小。
• 可以使用花括号 {} 进行显式初始化:int arr[5] = {1, 2, 3, 4, 5};
• 若元素数量少于数组大小,剩余元素自动初始化为0:int arr[5] = {1}; // 等价于 {1, 0, 0, 0, 0}
立即学习“C++免费学习笔记(深入)”;
• 可省略大小,由初始化列表推断:int arr[] = {1, 2, 3}; // arr大小为3
• 字符数组可直接用字符串字面量初始化:char str[] = "hello"; // 包含 '\0',大小为6
指针存储的是地址,初始化时可以指向已有变量、动态分配内存,或设为空。
• 指向已存在变量的地址:int val = 10; int* ptr = &val;
• 指向动态分配的内存:int* ptr = new int(5); // 初始化为5
int* arr = new int[5]{1,2,3,4,5}; // C++11起支持
int* ptr = nullptr; 或 int* ptr = NULL;
• 指向字符串字面量(但不可修改):const char* str = "hello";
arr = &other; // 错误,数组名不可变
ptr = &other; // 正确
sizeof(arr) 返回整个数组字节数;sizeof(ptr) 只返回指针本身大小(如8字节)。
• 数组初始化在栈上分配固定空间;指针常配合 new 在堆上动态分配。基本上就这些。数组强调固定内存块,初始化即分配;指针强调地址操作,初始化更灵活但需手动管理资源。理解它们的初始化差异,能更好控制内存和程序行为。
以上就是C++中数组和指针的初始化方法有哪些不同的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号