指向存储在结构中的数组的指针在哪里?

use*_*258 2 c c++ arrays pointers implicit-conversion

我有一个看起来像这样的结构.

struct puzzle {
  int d[16]; 
}; 
Run Code Online (Sandbox Code Playgroud)

我听说C/C++中的数组和指针是相同的,所以我认为struct会存储一个指针,而指针指向一个int数组.但是,我使用调试器进行了简单的实验,看看它是如何存储的,我发现数组直接存储在结构中.

  1. 为什么数组指针不存储在结构中?
  2. 指针存储在哪里?

leg*_*s2k 5

我听说C/C++中的数组和指针是相同的

没有!他们非常不同.在许多实例中,数组表达式衰减为指针,但这就是它.除此之外,数组和指针是非常不同的生物.更多地了解数组的衰减性质,以避免这样的混淆:什么是数组衰减?

为什么数组指针不存储在结构中?指针存储在哪里?

该数组是struct它的成员,它按预期存储.隐含地获取了衰减的指针,这里没有任何东西要存储.

struct puzzle s;
int *p = s.d;     /* p is now pointing to s.d[0] */
Run Code Online (Sandbox Code Playgroud)

这里s.d隐式转换为int*.这种衰变发生的地方和不发生的地方取决于所讨论的语言.在C++中,实例比C更多.这是为什么不在C和C++上标记问题的另一个原因.

  • Nit:"数组衰减到指针"应该是"数组*表达式*衰减到指针".数组对象本身永远不会改变类型. (2认同)