在设置一个处理arryas的函数时,我们通常将数组及其大小作为该函数的参数传递..为什么?
有没有一种方法可以使函数正常工作而不将数组的大小作为参数传递?
即
#include <iostream>
using namespace std;
int* rev(int *a,int n)
{
int* b =new int[n];
for (int i=0;i<n;i++)
{
b[i]=a[n-1-i];
}
return b;
delete [] b;
}
int main()
{
int a[]={1,2,3,4,5,6,7,8};
int* c=rev(a,sizeof(a)/sizeof(a[0]));
for(int i=0;i<8;i++)
{
printf("%d ",c[i]);
}
}
输出将是数组'a'的反面
8 7 6 5 4 3 2 1
但是如果我们将函数rev
编辑为:
int* rev(int *a)
{
int n =sizeof(a)/sizeof(a[0]);
int* b =new int[n];
for (int i=0;i<n;i++)
{
b[i]=a[n-1-i];
}
return b;
delete [] b;
}
然后将主要功能编辑为:
int main()
{
int a[]={1,2,3,4,5,6,7,8};
int* c=rev(a);
for(int i=0;i<8;i++)
{
printf("%d ",c[i]);
}
}
输出将为 垃圾 值..为什么??
请注意,我找不到支持我程序的答案。