Вчера я был в классе, и в какой-то момент инструктор говорил о коде C. Он сказал:
Какова цель создания указателя в C? Единственная цель заключается в том, чтобы заставить компилятор правильно интерпретировать операции указателя (например, добавление указателя int приведет к другому смещению чем добавление указателя char). Кроме того, нет никакой разницы: все указатели представлены так же, как в памяти, независимо, если указатель указывает на целочисленное значение, значение char, короткое значение, или любой другой. Так, литье указатель ничего не изменит в памяти, это только поможет программисту с операциями более связанными с указателем типа он имеет дело с.
Однако, я прочитал, особенно здесь, в Stack Overflow, что это не 100% правда. Я прочитал, что в некоторых странных машинах указатели для разных типов могут храниться по-разному в памяти. В этом случае не изменение указателя на правильный тип может вызвать проблемы, если код скомпилирован для этого типа машины.
В принципе, это тот код, о котором я говорю. Рассмотрим следующий код:
int* int_pointer;
char* char_pointer;
int_pointer = malloc(sizeof(int));
*int_pointer = 4;
И теперь два варианта:
1.
char_pointer = (char *)int_pointer;
2.
char_pointer = int_pointer;
Код на примере 2 может стать проблемой? Создание каста (case 1) в конечном итоге изменит формат указателя в памяти (если да, не могли бы вы привести пример машины?)?
Спасибо