Оператор sizeof()

Унарни оператор sizeof() користи се за рачунање величине операнда у бајтовима \([B]\). Резултат операције је неозначена целобројна константа типа size_t, дефинисаног у библиотеци stddef.h.

Коришћењем овог оператора можеш да избегнеш експлицитно навођење величине типова података у коду програма. То може да буде корисно јер величине типова података могу да зависе од компајлера, као што је био случај са различитим величинама long double типа у Microsoft C/C++ и GNU C компајлерима.

Операнд sizeof() оператора може бити основни или изведени тип података или израз. Општи облик наредбе формиране sizeof() оператором је:

sizeof(izraz);

Тип података као операнд

Ако је операнд тип података (са или без модификатора), резултат операције је количина меморије у бајтовима \([B]\) која се алоцира за тај тип.

Напиши програм у програмском језику C који ће на стандардни излаз исписати величине у бајтовима свих неозначених целобројних типова.

#include <stdio.h>

int main(void)
{
	printf("%llu\n", sizeof(unsigned char));
	printf("%llu\n", sizeof(unsigned short));
	printf("%llu\n", sizeof(unsigned int));
	printf("%llu\n", sizeof(unsigned long int));
	printf("%llu", sizeof(unsigned long long int));
	return 0;
}

На стандардном излазу исписаће се тражене величине у бајтовима:

1
2
4
4
8

Израз као операнд

Ако је операнд израз, резултат операције је количина меморије у бајтовима \([B]\) која се алоцира за вредност израза.

Напиши програм у програмском језику C који ће на стандардни излаз исписати величину у бајтовима збира целобројне променљиве int a = 3; и реалне променљиве double b = 3.14;.

#include <stdio.h>

int main(void)
{
	int a = 3;
	double b = 3.14;
	printf("%llu", sizeof(a + b));
	return 0;
}

На стандардном излазу исписаће се количина меморије која се алоцира за резултат типа double, јер је int + double = double.

8

Извршавање операнда у sizeof оператору

sizeof() је тзв. compile-time оператор, што значи да се израз као операнд sizeof() оператора не извршава.

Напиши програм у којем је иницијализована целобројна променљива int a = 10; и декларисана целобројна променљива int b;, где променљива b добија вредност операције sizeof(++a).

#include <stdio.h>

int main(void)
{
	int a = 10, b;
	b = sizeof(++a);
	printf("%d %d", a, b);
	return 0;
}

На стандардном излазу исписаће се:

10 4

јер је a инкрементирана као операнд оператора sizeof, па се њена вредност неће повећати за 1.