Почему sizeof () не возвращает длину массива? - PullRequest
0 голосов
/ 20 сентября 2018
#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 как ide.

1 Ответ

0 голосов
/ 20 сентября 2018

sizeof возвращает объем памяти того, что вы передаете.Возвращаемое значение равно ...

, измеренному в количестве единиц хранения размера символов, необходимых для типа

В типичной 32-разрядной системе a char - это один байт, а int - это четыре байта, поэтому вы получите кратное четыре для массива типа int.

Если вам нужна длина массив, просто поделите на размер типа:

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

Примечание: как dbush упоминается в комментариях ниже:

... это работает, только если массив не является параметром для функции.В этом случае массив превращается в указатель, а sizeof (массив) - в размер указателя.

...