Может ли указатель иметь значение ??в каком случае это используется
int num=100; int* iptr=NULL; iptr=reinterpret_cast<int*>(num); printf("%d \n",num); printf("%d \n",num);
результат 100 100
reinterpret_cast
Цитата из черновика CPP (N4713):
8.5.1.10 Повторное толкование приведения ... 6. Значение целочисленного типа или типа перечисления может быть явно преобразовано в указатель.Указатель, преобразованный в целое число достаточного размера (если таковое существует в реализации) и обратно в тот же тип указателя, будет иметь свое первоначальное значение; Отображения между указателями и целыми числами определяются реализацией .[Примечание: за исключением случаев, описанных в 6.6.4.4.3, результатом такого преобразования не будет значение указателя, безопасно полученное .—Конец примечания]
Условия для безопасных указателей.
6.6.4.4.3 Безопасно полученные указатели ... 2 Значение указателя является безопасно полученным указателем на динамический объект, только если онимеет тип указателя на объект, и он может быть одним из следующих: (2.1) - значение, возвращаемое вызовом стандартной реализации библиотеки C ++ для :: operator new (std :: size_t) или :: operator new (std):: size_t, std :: align_val_t); (2.2) - результат получения адреса объекта (или одного из его подобъектов), обозначенного lvalue, в результате косвенного обращения через безопасно полученное значение указателя; (2.3) - результат хорошо определенной арифметики указателя с использованием безопасно полученного значения указателя; (2.4) - результат хорошо определенного преобразования указателя из безопасно полученного значения указателя; (2.5) - результат reinterpret_cast из безопасно полученного значения указателя; (2.6) - результат reinterpret_cast целочисленного представления безопасно полученного значения указателя; (2.7) - значениеобъективистскиеt, значение которого было скопировано из прослеживаемого объекта указателя, где во время копирования исходный объект содержал копию безопасно полученного значения указателя.