2012-01-08 2 views

ответ

4

Использование этого значения будет интерпретировать адрес, на который res точек (что всего лишь номер в любом случае) как длинный.

Это будет работать большую часть времени, но это не совсем нормально (во многом зависит от того, как вы его используете). Например, если вы просто хотите, чтобы распечатать его, вы можете уйти с

printf("%p", res); 

Как правило: относиться к любому броску с подозрением.

+0

Предположим, что 'long' - это 2 слова, а' unsigned char * '- 1 слово. Куда он возьмет остальные бит? стек вызовов? – amit

+1

Остальные биты будут либо 1, если тип источника подписан и отрицателен, либо 0 в противном случае. –

+0

и что это значит? не могли бы вы привести мне пример? – mary

2

Выделенная память не читается, вы просто накладываете указатель на память на длинный.

0

Это не дает прямого ответа на ваш вопрос, но представляет собой полезную информацию, которая более или менее релевантна вашей сиотации.

Приведение от типа указателя к целочисленному типу определяется реализацией (это означает, что реализация решает, что происходит, когда вы накладываете указатель на целое число). Реализации C99, которые поддерживают некоторый тип обратимого преобразования, также должны содержать два типа, найденные в <stdint.h>, специально для преобразования указателей в целые числа, а именно uintptr_t и intptr_t. Если ваша реализация предоставляет эти два типа, вы можете безопасно преобразовать указатель на эти типы и вернуться к исходному типу указателя.

Поскольку эти типы определены для реализации, вам нужно будет проверить свою документацию по реализации, каковы основные типы.