【问题标题】:"sizeof" to know the size of an array doesn't work in a function in C [duplicate]“sizeof”知道数组的大小在C中的函数中不起作用[重复]
【发布时间】:2015-04-04 14:03:31
【问题描述】:
int main()
{
int laiArreglo[] = {5,8,2,3,1,4,6,9,2,10}, liElemento;

printf("\nInsert the number: ");
            scanf("%d", &liElemento);
            ShowNumber(laiArreglo);
return 0;
}




void ShowNumber(int laiArreglo[])
{
    int liContador;

    printf("\nNumbers: ");

    for (liContador = 0; liContador < sizeof (laiArreglo) / sizeof (int); liContador++)
    {
        printf("%d ", laiArreglo[liContador]);
    }
}

我在 main 中使用 (sizeof (laiArreglo) / sizeof (int)) 并且效果很好,但是现在在函数内部它不起作用,为什么?

【问题讨论】:

  • 因为它是一个指针而不是一个数组。
  • ShowNumber的参数是int*。你必须传递一个额外的参数来表示数组的大小来修复它。

标签: c arrays function sizeof


【解决方案1】:

请记住,数组的名称"decays"指向其第一个元素的指针。当您使用

sizeof(laiArreglo)

来自main,计算结果为

10*sizeof(int)

而不是

sizeof(int*)

因为它是one of the cases where decay dosen't happen

当你使用时

ShowNumber(laiArreglo);

将其传递给函数,确实会发生衰减。所以上面的语句等价于

ShowNumber(&laiArreglo[0]);

当你使用

sizeof(laiArreglo)

从函数ShowNumber,它的计算结果为

sizeof(int*)

因为laiArreglo是一个指向int的指针,指向数组laiArreglo的第一个元素的地址。

【讨论】:

    【解决方案2】:

    在你的函数ShowNumber()中,你过去的是一个指针而不是一个数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2014-09-13
      • 2014-10-27
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      相关资源
      最近更新 更多