将整个数组传递给C中的函数

时间:2014-04-06 14:50:54

标签: c arrays

我已经为插入镜头编写了一个程序,如下所示:

int _tmain(int argc, _TCHAR* argv[])
{
int arr[10] = {1,2,3,10,5,9,6,8,7,4};
int value;
cin >> value ;
int *ptr;
ptr = insertionshot(arr); //here Im passing whole array
BinarySearch(arr,value);
return 0;
}

int * insertionshot(int arr[])
{

//Changed after a hint (now, its fine)
int ar[10];
for(int i =0;i < 10; i++)
{
    ar[i] = arr[i];
}
 //Changed after a hint

int arrlength = sizeof(ar)/sizeof(ar[0]); //here array length is 1, it should be 10
for(int a = 1; a <= arrlength -1 ;a++)
{
    int b = a;
    while(b > 0 && ar[b] < ar[b-1])
    {
        int temp;
        temp = ar[b-1];
        ar[b-1] = ar[b];
        ar[b] = temp;
        b--;
    }
}
return ar; 
}

问题是在将整个数组传递给函数之后,我的函数定义只在数组中显示了1个元素,而且#34; arraylength&#34;给予1.

1 个答案:

答案 0 :(得分:1)

函数形式参数列表中的

int arr[]syntax quirk,它实际上被处理为int *arr。所以sizeof技巧的行为并不像你期望的那样。

在C中,不能按值传递数组;此外,在运行时,数组不记得它的长度。

您可以通过在编译时将指针传递给整个数组来包含长度信息:

int * insertionshot(int (*arr)[10])

当然,使用这种方法,您只能传递长度为10的数组。因此,如果您打算能够传递不同长度的数组,则必须将长度作为另一个参数传递。