数组未正确传递

时间:2013-07-30 11:31:58

标签: c arrays

我尝试发送到被调用函数的数组未正确发送。假设我在数组'a'中插入了五个元素,并使用函数insert函数传递数组,并使用以下代码的最后两行检查数组的大小,它显示的数字小于数组的实际大小。为什么会发生这种情况?

void main()
{
    //rest of the code     
    insert(a,key);   //user-defined function
}

void insert(int a[],int key)
{
    int *p=a;
    int n = sizeof(a);
    printf("No. of elements entered:%d\n",n);
}

1 个答案:

答案 0 :(得分:5)

sizeof(a)只是给你一个以字节为单位的指针大小(显然是你机器上的4)。一旦将数组传递给函数,就无法确定数组的大小,因为数组在作为函数参数传递时会衰减为指针。您应该将数组的大小作为单独的参数传递,例如

void insert(int a[], int n, int key)
{
    printf("No. of elements entered: %d\n", n);
}

int main()
{
    int a[5];

    insert(a, 5, key);
}