C++新的<datatype>(<value>)究竟做了什么?

imk*_*dal 2 c++ heap stack pointers new-operator

在这段代码中:

int * p = new int(44);
Run Code Online (Sandbox Code Playgroud)

p在堆上分配,它指向的值是44; 但现在我也可以这样做:

p[1] = 33;
Run Code Online (Sandbox Code Playgroud)

没有收到错误.我一直在想

int * p = new int(44);
Run Code Online (Sandbox Code Playgroud)

只是另一种说法"P在堆上分配并指向一个包含44的地址",但显然它使得pa指向一个int数组?是这个新阵列44的大小?或者这个结果是不寻常的.

Tom*_*m W 5

你是对的:P在堆上分配并指向一个包含44的地址.没有分配数组. p[1] = 33;他们称之为"未定义的行为".您的程序可能会崩溃,但不保证每次执行此操作都会崩溃.

  • 关.变量"p"在堆栈上分配.但是,它指向的存储器(44)在堆上分配. (2认同)