动态数组的内存地址
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 数组自动衰减为指针。
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 数组自动衰减为指针。