以前写过一篇关于数组长度的文章,经过某位好友的指点,知道了新的解决方法了

/*******************************************
T *a[n]和T (*a)[n]的区别
---------
    T *a[n]   数组内存放n个T型指针
    T (*a)[n] 存放n个T型元素的数组
          指针a指向这个数组//a为二级指针


---------------------------------------
T &a[n]与T (&a)[n]的区别
---------
    T &a[n]   [退化为指针]
    T (&a)[n] 存放n个T型元素的数组的引用

*******************************************
*/


#include
<iostream> 
using namespace std;

int insertsort(int (&a)[10])//防止了指针退化
{
    
int j, key;
    
for(int i=1; i<sizeof(a)/sizeof(int); 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[10= 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]<<'\t';
    system(
"pause");
    
return(0);
}
 

但必需知道数组的长度,int(&a)[10]中的10必需说明!所以如果未知数组长度,必需先要求得!
 再次受高手指点,使用模版解决了n传递的问题
template<class T,int n>
T insertsort(T (
&a)[n])//防止了指针退化
{
    T j
=T();
    T key
=T();
    
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 T();
}
 
我要继续努力ing,好多知识有待熟悉额