所以,我一直都知道在 C/C++ 中传递的数组“对象”只包含数组中第一个对象的地址。
指向数组“对象”的指针和它包含的值如何相同?
有人可以向我指出更多信息,也许是关于组装中的所有工作原理。
最佳答案
简答:指向数组的指针被定义为与指向数组第一个元素的指针具有相同的值。这就是 C 和 C++ 中数组的工作原理。
学究式的回答:
C 和 C++ 有 rvalue 和 lvalue 表达式。左值是&
可以应用运算符。它们也有隐式转换。一个对象在被使用之前可能会被转换成另一种类型。 (例如,如果您调用 sqrt( 9 )
,则 9
将转换为 double
,因为未定义 sqrt( int )
。)
数组类型的左值隐式转换为指针。隐式转换更改array
至&array[0]
.这也可以明确写成 static_cast< int * >( array )
, 在 C++ 中。
这样做没问题。投给 void*
是另一个故事。 void*
有点难看。并将括号转换为 (void*)array
也很丑。所以请避免(void*) a
在实际代码中。
关于c++ - 在 C/C++ 中,对于数组 a,我刚刚了解到 (void*)&a == (void*)a。这是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557736/