Кастинг на C унікальний, зовсім не схожий на інші мови. Це також ніколи не є розумним.
Кастинг на C перетворює значення з одного типу в інший, використовуючи ретельно визначені правила. Якщо вам справді потрібно знати, прочитайте стандарт. Інакше основні моменти:
- Перетворення між цілими типами зберігає значення, якщо це можливо. Якщо місце призначення має більше бітів, це розширюється і, як правило, безпечно, але може включати розширення знаків. Якщо вужчі, біти будуть втрачені.
- Перетворення між типами вказівника зберігає значення вказівника, але результати часто не визначені, часто не переносяться і часто корисні для розширених сценаріїв.
- Перетворення між цілими типами та покажчиками є нормальним, якщо ціле число є достатньо великим, і зберігається бітова модель (все, що це може означати). Якщо ціле число занадто мало, результат не визначений, але не є корисним. Як правило, "long" достатньо широкий для "void *", але жодних гарантій! Покажчики, створені таким чином, можуть бути недійсними в усіх видах цікавих способів.
- Перетворення між плаваючими і цілими типами - це арифметичні перетворення, визначені відповідною процедурою бібліотеки (з усіченням, а не округленням).
- Ви можете скинути повернене значення функції до недійсної. Я ніколи не маю. Це нічого не робить.
Деякі касти застосовуються неявно, а в деяких із них компілятор видасть попередження. Найкраще прислухайтеся до попереджень!
Визначення словника для кастингу найкраще ігнорувати як непотрібне. Багато хто в ролях краще описується термінами конверсія або примус, тому їх теж варто знати.
C ++ набагато складніше, але ви цього не запитували, чи не так?