为什么我们不能传递&array到函数where&array [0]是可能的

Sub*_*esh 1 c++

void fun(int* array){}  


int main(){

int array[]={1,2,3};
fun(&array);----->(1)//error in this line
return 0;
}
Run Code Online (Sandbox Code Playgroud)

error: cannot convert âint (*)[3]â to âint*â for argument â1â to âvoid fun(int*â).

如果我通过fun(&array[0]),它的工作正常.按照我的理解&array,&array[0]两者都产生相同的地址.明确澄清.

Ben*_*igt 5

虽然任何聚合的地址(这意味着数组和标准布局类)都保证与第一个元素的地址相同,但类型是不同的,并且没有隐式转换.


作为一个例子,为什么不同的类型是重要和有用的:

for( int *p = array; p < (&array)[1]; ++p )
Run Code Online (Sandbox Code Playgroud)

迭代所有元素array,而

for( int *p = array; p < (&array[0])+1; ++p )
Run Code Online (Sandbox Code Playgroud)

只执行一次.