Защо sizeof(array) се умножава?

Това няма смисъл за мен:

    int start_tab[2];
    printf("size of an array: %d\n", sizeof(start_tab));
    8

Защо 8? Как да го направя да бъде размер 2?


person krzyhub    schedule 07.04.2015    source източник
comment
Защо не прочетете малко документация за оператора sizeof?   -  person juanchopanza    schedule 07.04.2015
comment
съжалявам, свикнах да програмирам на по-високи езици и това изглежда очевидно, но сега съм твърде ядосан, за да чета.   -  person krzyhub    schedule 07.04.2015
comment
възможен дубликат на оператор sizeof() в C   -  person Fiddling Bits    schedule 07.04.2015


Отговори (6)


Моля, имайте предвид, че sizeof е оператор, а не функция. sizeof връща размера на предоставения тип данни.

Защо 8?

start_tab е от тип int [2], връща 2 * sizeof (int)# или 8.

Как да го направя да бъде размер 2?

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

sizeof(start_tab) / sizeof(start_tab[0])

# Във вашата платформа, sizeof(int) == 4.

person Sourav Ghosh    schedule 07.04.2015

Трябва да разделите на размера на типа като този

sizeof(start_tab) / sizeof(int)

sizeof дава размера в байтове, тъй като всяко int е 4 байта, тогава два от тях очевидно са осем, така че можете да разделите на размера на int и да получите стойността, която търсите.

person Iharob Al Asimi    schedule 07.04.2015

Трябва да направите sizeof(start_tab)/sizeof(start_tab[0]), за да получите броя на елементите в масив

person Mateo Hrastnik    schedule 07.04.2015

Тъй като int е 4 байта... така че умножението по 2 прави 8 Така че, ако искате размерът на елемента, разделете на sizeof(int).

person rfkortekaas    schedule 07.04.2015

Тъй като int е на вашата платформа 32 бита, което е 4 байта. Имате 2 ints, умножени по 32 бита, е равно на 64 бита, което е 8 байт. sizeof ще върне размера на типа данни в байтове.

person TobiSH    schedule 07.04.2015

От стандарта C (6.5.3.4 Операторите sizeof и alignof)

2 Операторът sizeof дава размера (в байтове) на неговия операнд, който може да бъде израз или името на тип в скоби.

Масив

int start_tab[2];

заема 2 * sizeof( int ) байта, защото има два елемента и всеки елемент има тип int. Така че, ако sizeof( int ) е равно на 4, тогава масивът заема 8 байта.

Така че имате формула

sizeof( start_tab ) = 2 * sizeof( int )

Или в общ случай, ако масивът има N елемента от тип T като например

T array[N];

тогава

sizeof( array ) = N * sizeof( T )

Или тъй като всеки елемент от масива има тип T, включително първия елемент от масива, тогава можете също да пишете

sizeof( array ) = N * sizeof( array[0] )

С помощта на тази формула можете да изчислите N like

N = sizeof( array ) / sizeof( array[0] )

or

N = sizeof( array ) / sizeof( *array )

защото *array дава първия елемент от масива.

person Vlad from Moscow    schedule 07.04.2015