我正在尝试学习C++,我有相当多的C#经验,这两种语言非常不同,我很难理解数据类型、指针变量以及它们的初始化。 请考虑下面的代码:
wchar_t *array = new wchar_t[10]; //Declaring a pointer of wchart_t and initializing to a wchar_t array of size 10 ?
auto memAddressOfPointer = &array; //auto is resolving memAddressOfPointer to a pointer of a pointer?
cout << array << endl; //Printing the memory address of array not the object created above?
cout << *array << endl; //Getting the actual value of the object (empty wchar_t array of size 10 in bytes?
cout << &array << endl; //Printing the address of the obj?
cout << memAddressOfPointer << endl; //Printing the address of the obj ?
我的问题是,为什么要创建一个指针并初始化它?为什么不直接创建一个wchar_t数组呢?就像这样:
wchar_t array [10];
我也参考了这篇 Stack Overflow 的帖子: 无法创建 wchar_t 数组。
感谢您的关注。
wchar_t array[10]
,这将在堆栈中创建一个数组,意味着当数组超出范围时,它就完成了,你将无法访问它。使用new
创建数组将返回指向数组第一个元素的指针。注意:使用new创建的数组将在堆中创建。这被称为动态内存分配。因此:array将返回堆中数组的地址。*array将使你能够访问该内存地址中的数据。而memAddressOfPointer
是一个指向指针的指针。 - Abdelbaki Boukerchecout << *array << endl
会导致未定义的行为(您试图输出未初始化的对象) - M.M