C++什么是指针=新类型&Q;,而不是&Q;指针=新类型[]? [英] c++ what is "pointer = new type" as opposed to "pointer = new type []"?

查看:83
本文介绍了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;指针=新类型[]?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆