为什么sizeof()不返回数组的长度?

时间:2018-09-19 22:35:54

标签: c arrays sorting sizeof

#include <stdio.h>

int main() {
    int test[3];
    int i;
    test[0]=5;
    test[1]=10;
    test[2]=7;

    printf("array size: %d\n",sizeof(test));
    sortArray(test);

    for(i=0;i<sizeof(test);i++) {
        printf(" %d ", test[i]);
    }
    printf("\n");
}

void sortArray(int number[]) {
    int i,j,a;
    int n = 5;

    for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            if (number[j] < number[i]) {
                a = number[i];
                number[i] = number[j];
                number[j] = a;
            }
        }
    }
}

我遇到问题的数组是“测试” 当我运行程序时,“大小”始终是预期大小的4的倍数。例如:test [3]输出的大小为12。我在做什么错?我也使用code :: blocks作为一个想法。

1 个答案:

答案 0 :(得分:5)

sizeof返回您传递的内容的内存大小。返回值为...

  

以所需的char大小的存储单元数衡量   输入

在典型的32位系统中,char是一个字节,int是四个字节,因此对于类型为int的数组,您将获得四倍的整数。 / p>

如果您想要数组的 length ,只需除以类型的大小即可:

int a[3];
size_t n = sizeof(a) / sizeof(a[0]);

注意:正如dbush在以下评论中所述:

  

...仅在数组不是参数的参数时有效   功能。在这种情况下,数组会衰减为指针,并且sizeof(array)   计算指针的大小。