* Преобразуване на типове, размер на обект
Публикувано на 24 октомври 2008 в раздел С/C++.
I. Преобразуване на типове:
Гъвкавостта на езика С се подсилва от възможността за преобразуване на един тип данни в друг:
(тип) операнд
Пример:
double x = 15.5; // Следното ще доведе до: // warning C4244: 'initializing' : conversion from // 'double' to 'int', possible loss of data int y = x; // Когато укажем преобразуването явно този warning изчезва: int z = (int)x;
Трябва да споменем, че почти всички компилатори преобразуват типовете данни сами, когато това е необходимо. Например въпреки даденото предупреждение нашата програма няма да спре изпълнението си. Въпреки това е препоръчително сами да се грижим за тези ситуации.
II. Операция за размер на обект:
В редица случаи се налага да работим с обекти, на които не им знаем предварително големината. За да я определим се използва операторът sizeof:
sizeof(операнд)
Като операнд може да се използува променлива от всеки валиден за езика израз, включително структури. Например следната програма ще изведе размерите на различните типове данни:
char c;
int i=100;
printf("%d", sizeof(c));
printf("%d", sizeof(i));
printf("%d", sizeof(float));
printf("%d", sizeof(double));
Ще забележите, че връщания резултат е винаги броя байтове които са или биха били заделени за подадената променлива.
Най-често операцията за размер на обект се използва при определянето на броя на елементите на масив:
// Заделя се памет за пет елемента от тип int
int arr[5];
// sizeof(arr) ще върне броя байтове заделени за целия масив,
// а sizeof(int) само на типа данни int
int arrlength = sizeof(arr)/sizeof(int);
printf("%d", arrlength);
Когато пишем функции, приемащи масиви като параметър, е добре да използваме точно този подход. Така нашия код ще бъде преносим и няма да зависи от „магически числа“.
Пусни коментар
Категории
- Бази от Данни (39)
- Вероятности (30)
- История (14)
- Кучета (67)
- Лада Нива (91)
- Математика (158)
- Методика (52)
- Общи работи (107)
- ПИК-3 Java (38)
- Политика (40)
- Програмни Среди (1)
- ПТСК (37)
- С/C++ (45)
- Семейни (15)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Здравей бебе!
- Какво означават метеорологичните кодове?
- Берра проправя пътеки
- Задача от YES
- Колан за теглене на автомобил