这取决于你所说的“阵列地址”。
如果你问一个数组是否在转换为指针时给出的结果等于它的第一个元素的地址,那么答案是肯定的。例如;
#include <iostream>
void func(int *x, int *y)
{
std::cout << "x and y are ";
if (p != q) std::cout << "NOT ";
std::cout << " equal\n";
}
int main()
{
int x[2];
func(x, &x[0]);
}
这将始终报告两个指针是相等的。宋远尧已经解释了为什么。
但是,x
实际上并不是一个指向数组的指针(在此代码中也没有转换为一个指针)。如果更改的func()
在main()
调用
func(&x, &x[0]);
那么该语句甚至不会编译。原因是&x
(数组x
的地址)不是指向int
的指针 - 它是指向两个int
的数组的指针,并且不能隐式转换为指向int
的指针。
但是,该值将与运行此代码可能证明的值相同。
#include <iostream>
void func2(void *x, void *y)
{
std::cout << "x and y are ";
if (p != q) std::cout << "NOT ";
std::cout << " equal\n";
}
int main()
{
int x[2];
func2(&x, &x[0]); // both pointers implicitly converted to void * when calling func2()
}
就是这样!谢谢! – xskxzr