动态数组的内存地址

memory address of dynamic array

double *tt;
tt = new double[2];
std::cout << tt[0] << std::endl;
std::cout << tt << std::endl;

结果是这样的

-1.72723e-77

0x12e6062e0

这两者有什么区别? 不知道为什么两个值的格式不同(tt[0]是X.~~但是tt没有意义)

What is the difference between these two?

一个是对象在数组中的值,一个是对象在数组中的内存地址。

I don't know why the two values ​​have different formats

格式不同是因为两个值的类型不同。一个是 double,另一个是指针 (double*)。

P.S。由于您没有初始化数组的元素,因此读取值会导致未定义的行为。这是一个错误。永远不要那样做。

tt[0] 取消引用指向数组 tt 的指针,结果是类型 double 的表达式。相当于*tt。该位置有一个随机值,因此您会看到打印的随机 floating-point 值。

但是 tt 只是一个指针(double* 类型),因此当您打印它时,会显示内存位置的地址(数组第一个字节的地址) . C-style 数组自动衰减为指针。