這取決於你所說的「陣列地址」。
如果你問一個數組是否在轉換爲指針時給出的結果等於它的第一個元素的地址,那麼答案是肯定的。例如;
#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