Кастинг в Си уникален, совсем не похож на другие языки. Это также никогда не разумно.
Приведение в C преобразует значения из одного типа в другой, используя тщательно определенные правила. Если вам действительно нужно знать, прочитайте стандарт. В противном случае основные моменты:
- Преобразование между целочисленными типами сохраняет значение, если это возможно. Если у пункта назначения больше битов, это расширение и, как правило, безопасно, но может включать расширение знака. Если уже, биты будут потеряны.
- Преобразование между типами указателей сохраняет значение указателя, но результаты часто не определены, часто непереносимы и часто полезны для сложных сценариев.
- Преобразование между целочисленными типами и указателями в порядке, если целое число достаточно велико и сохраняет битовый шаблон (что бы это ни значило). Если целое число слишком мало, результат не определен, но бесполезен. Как правило, «long» достаточно широк для «void *», но никаких гарантий! Указатели, созданные таким образом, могут быть недействительными, во всех видах интересных способов.
- Преобразование между типами с плавающей точкой и целочисленными типами - это арифметические преобразования, как определено соответствующей библиотечной подпрограммой (с усечением, а не с округлением).
- Вы можете привести возвращаемое значение функции к void. У меня никогда не было. Это ничего не делает.
Некоторые приведения применяются неявно, а в некоторых из них компилятор выдает предупреждение. Лучше всего прислушаться к предупреждениям!
Словарное определение для приведения лучше игнорировать, поскольку оно бесполезно. Многие приведения лучше описываются терминами преобразования или принуждения, поэтому их тоже стоит знать.
С ++ НАМНОГО сложнее, но ты об этом не спрашивал?