求解整型数组长度可以使用sizeof(a)/sizeof(int),当今天我编写插入排序时遇到个问题,代码如下:

#include < iostream >
using   namespace  std;
int  insertsort( int  a[])
{
    
int  j,key;
    
for ( int  i = 1 ;i < sizeof (a) / sizeof ( int );i ++ // 这里却不能正确得到数组长度,单步执行时发现for循环未执行
     {
        key
= a[i];
        j
= i - 1 ;
        
while (a[j] > key && j >= 0 )
        
{
           a[j
+ 1 ] = a[j];
           j
-- ;
        }

        a[j
+ 1 ] = key;
    }

    
return ( 0 );
}


int  main()
{   
    
int  a[] = { 2 , 6 , 9 , 3 , 5 , 8 , 1 , 6 , 3 , 8 } ;

    insertsort(a);
    
for ( int  i = 0 ;i < sizeof (a) / sizeof ( int );i ++ )   // 这里可以正确求解数组长度
        cout << a[i] << "    " ;
    system(
" pause " );
    
return ( 0 );
}

搜集资料得到的答案是,数组传入函数时,传入的是指针,并不是我想的那样拷贝副本,
所以此时sizeof(a)/sizeof(int)等于1,条件不符合,跳出循环。
这里只能添加一个数组长度的参数:

#include < iostream >
using   namespace  std;
int  insertsort( int  a[], int  n)
{
    
int  j,key;
    
for ( int  i = 1 ;i < n;i ++ )
    
{
        key
= a[i];
        j
= i - 1 ;
        
while (a[j] > key && j >= 0 )
        
{
           a[j
+ 1 ] = a[j];
           j
-- ;
        }

        a[j
+ 1 ] = key;
    }

    
return ( 0 );
}


int  main()
{   
    
int  a[] = { 2 , 6 , 9 , 3 , 5 , 8 , 1 , 6 , 3 , 8 } ,n;
    n
= ( sizeof (a) / sizeof ( int ));
    insertsort(a,n);
    
for ( int  i = 0 ;i < n;i ++ )
        cout
<< a[i] << "    " ;
    system(
" pause " );
    
return ( 0 );
}

不知道各位高手有什么好办法,小弟谢了!