C++ 为什么sizeof(&;arr)和sizeof(arr)/sizeof(int)不同? 使用名称空间std; int main() { int-arr[5]={1,2,3,4,5}; 差异在于arr是一个数组,而&arr是一个指向数组的指针。比较:

C++ 为什么sizeof(&;arr)和sizeof(arr)/sizeof(int)不同? 使用名称空间std; int main() { int-arr[5]={1,2,3,4,5}; 差异在于arr是一个数组,而&arr是一个指向数组的指针。比较: ,c++,C++,为什么sizeof(&;arr)和sizeof(arr)/sizeof(int)不同? 使用名称空间std; int main() { int-arr[5]={1,2,3,4,5}; 差异在于arr是一个数组,而&arr是一个指向数组的指针。比较: using namespace std; int main( ) { int arr[ 5 ] = { 1 , 2 , 3 , 4 , 5 } ; cout << sizeof( arr ) << end

为什么sizeof(&;arr)和sizeof(arr)/sizeof(int)不同?
使用名称空间std;
int main()
{
int-arr[5]={1,2,3,4,5};

差异在于
arr
是一个数组,而
&arr
是一个指向数组的指针。比较:

using namespace std;
int main( )
{
    int arr[ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
    cout << sizeof( arr ) << endl ;
    cout << sizeof( &arr ) << endl ;
    return 0 ;
}

平台上的指针大小固定,无论指向何处(指向常规类型的指针,而不是成员或函数的指针)不确定是否有现成的答案可以很好地解释这一点,但很接近。这可能会有所帮助:指向数组的指针的大小并不取决于数组的大小。是什么让你认为地址的大小和数组中元素的数量应该是相同的?+1我不知道
&arr
的大小和指向数组的指针
ptr_-arr
可以通过使用指向数组的指针赋值来实现相等。这澄清了我的想法。如果&arr和ptr_-arr是相同的,即指向数组的指针为5整数,为什么*(&arr+1)给出错误的输出,而*(arr+1)给出正确的输出output@RoCkEt
arr
衰减为
int*
,而
&arr
int(*)[5]
即指向5个整数数组的指针。
+1
指针算法在这两者之间是不同的,
*(arr+1)
只是
arr[1]
*(&arr+1)
是超出
arr
末尾的越界访问。
#include <iostream>
using namespace std;

int main( )
{
    int arr[5] = { 1, 2, 3, 4, 5 } ;  // array of 5 integers
    int (&ref_arr)[5] = arr;          // reference to array of 5 integers
    int (*ptr_arr)[5] = &arr;         // pointer to array of 5 integers

    cout << "array size  "   << sizeof(arr)  << " = " << sizeof(ref_arr) << endl;
    cout << "pointer size  " << sizeof(&arr) << " = " << sizeof(ptr_arr) << endl;

    return 0 ;
}
array size  20 = 20
pointer size  8 = 8