调用动态数组函数时出错

时间:2012-01-08 12:50:57

标签: c

我在调用函数dynamic_arr时遇到错误 - 不知怎的,我放弃了所有的数组而且只是松散了 返回的第一个元素。

在我的代码中,main调用一个动态需要创建数组的函数 并且在用户将插入数组的元素之后,所有数组都需要传递给 函数funcdosomthing

但目前,函数funcdosomthing只获取第一个元素,而不是所有数组。

只是为了明确其他一切正常 - 当我不使用函数dynamic_arr时 设置数组manualy int a[] = {1, 0, 2};一切正常,函数funcdosomthing获取包含3个元素的所有数组。

这是我的代码:

int *dynamic_arr(int n)
{
    int i, *a;
    a = (int*)calloc(n, sizeof(int));
    for(i=0;i<n;i++) scanf("%d",a+i);
    return a;
}

int mainprograma()
{
    int n,*a,i;

    scanf("%d",&n);
    a=dynamic_arr(n);

    funcdosomthing(a, sizeof a / sizeof a[0]);
    ...

2 个答案:

答案 0 :(得分:8)

您正在尝试从指向动态数组的指针计算数组的大小。

sizeof a / sizeof a[0]

在C中,如果只有指向数组的指针,则无法找到数组的长度。如果您有数组,但是您没有数组,那么您使用的代码是合适的,您有一个指针

所以,如果你已经宣布a这样

int a[3];

或者

int a[] = {0, 1, 2};

然后a将是数组而不是指针,上面的sizeof代码将适用。

幸运的是,您知道动态数组有多大,因为您刚创建它。它有n个元素。所以你必须这样写funcdosomthing这样的电话:

funcdosomthing(a, n);

答案 1 :(得分:0)

为什么当你已经知道尺寸时,你试图找到尺寸?!

您应该使用n而不是像sizeof a / sizeof a[0]那样计算大小。更重要的是,如果sizeof(a)是一个数组,a将给出您的预期结果。在这种情况下,它是pointer-to-memory-which-can-store-n-integers