Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Зачем указателю нужно знать, какой тип хранится по адресу?

#cpp #указатели


Собственно, зачем мы пишем тип данных перед объявлением переменной-указателя? Если
указатели хранят адрес ячейки, то какое им дело, что лежит по этому адресу?
    


Ответы

Ответ 1



Собственно зачем мы пишем тип данных перед объявлении переменной-указателя? Собственно за тем же, зачем мы указываем тип переменной. Когда приходит время работать с разъименованным указателем (то есть с переменной), то транслятору нужно знать какой это тип, чтобы правильно применять операции к этому типу. Если указатели хранят адрес ячейки то какое им дело что лежит по этому адресу? Пока указатели просто хранят адрес им (то есть транслятору) все равно. Но когда начинается использование данных по этому адресу, то транслятору нужно знать тип этих данных. UPD1: Нужно понимать, что (к примеру) когда суммируются два целых (int) числа, то транслятор вызывает одну функцию. А когда суммируются два float числа, то транслятор вызывает совсем другую функцию. Поэтому в программировании важна не только информация об операциях над переменными, но и также не менее важна информация об типах этих переменных.

Ответ 2



Скорее, чтобы компилятор знал с какими данными он работает,и как с ними можно манипулировать. Чтоб при разыменовывании указателя знать на какую память он ссылается - размер типа(байты). Всё таки C++ - статически типизированный язык программирования.

Ответ 3



Считается, что указателями сложно управлять. Довольна часто неверная инициализация указателей приводит к ошибкам, которые трудно обнаружить. Если компилятор будет знать, какой тип данных будет хранится по указателю, то некоторые ошибки можно будет избежать. Также при инкрементировании указателя, программа должна знать размер типа данных на который указывает указатель. Если не хотите объявлять тип указателя, то всегда можно использовать пустой тип void.

Ответ 4



Если представить, что тип переменной - это улица, а значение переменной - это собственно номер квартиры, тогда можно понять, зачем нужет тип. Компилятор не в состоянии найти квартиру без адреса, + ко всему типы данных очень сильно влияет на функционал переменной. Поэтому и нужно использовть тип данных при инициализации переменной-указателя.

Комментариев нет:

Отправить комментарий