c++ what is quot;pointer = new typequot; as opposed to quot;pointer = new type []quot;?(C++什么是指针=新类型Q;,而不是Q;指针=新类型[]?)
问题描述
在许多教程中,关于动态内存的第一个代码样例是这样开始的:
int * pointer;
pointer = new int; // version 1
//OR
pointer = new int [20]; // version 2
他们总是继续解释第二个版本的工作原理,但完全避免谈论第一个版本。
我想知道的是,pointer = new int创建了什么?我能用它来做什么?什么意思?每一篇教程都会完全避免谈论第一个版本。我发现(通过捣乱)是这样的:
#include <iostream>
using namespace std;
int main()
{
int * pointer;
pointer = new int;
pointer[2] = 1932; // pointer [2] exists? and i can assign to it?!
cout << pointer[2] << endl; // ... and access it successfully?!
};
我可以下标pointer这一事实告诉我,到目前为止,pointer = new int隐式创建了一个数组。但如果是,那么它的尺寸是多少?
如果有人能帮我把这一切弄清楚,我将不胜感激...
推荐答案
对于初学者来说,这是一个典型的C和C++错误。第一句话创建了一个仅容纳int的空间。第二个函数创建一个空间来容纳int中的20个。然而,在这两种情况下,它都将动态保留区域的开始地址分配给pointer变量。
pointer[2]所述)。在以下情况下:
int* pointer = new int;
您可以访问pointer[2],但您会有一个未定义的行为。请注意,您必须检查这些访问是否实际发生,并且编译器通常在防止此类错误方面几乎无能为力。
这篇关于C++什么是指针=新类型&Q;,而不是&Q;指针=新类型[]?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++什么是指针=新类型&Q;,而不是&Q;指针=新类型[]?
基础教程推荐
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- 初始化列表*参数*评估顺序 2021-01-01
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05
- CString 到 char* 2021-01-01
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
