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

149
12 апреля 2019, 01:40

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

Answer 1

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

Собственно за тем же, зачем мы указываем тип переменной. Когда приходит время работать с разъименованным указателем (то есть с переменной), то транслятору нужно знать какой это тип, чтобы правильно применять операции к этому типу.

Если указатели хранят адрес ячейки то какое им дело что лежит по этому адресу?

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

UPD1:

Нужно понимать, что (к примеру) когда суммируются два целых (int) числа, то транслятор вызывает одну функцию. А когда суммируются два float числа, то транслятор вызывает совсем другую функцию. Поэтому в программировании важна не только информация об операциях над переменными, но и также не менее важна информация об типах этих переменных.

Answer 2

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

Answer 3

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

Также при инкрементировании указателя, программа должна знать размер типа данных на который указывает указатель.

Если не хотите объявлять тип указателя, то всегда можно использовать пустой тип void.

Answer 4

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

READ ALSO
Передача данных Android Arduino по Bluetooth

Передача данных Android Arduino по Bluetooth

Мне необходимо только передать пару строк на ардуино, ничего от нее получать не надоНо проблема в том, как только я пытаюсь записать данные...

143
Вопрос новичка по Canvas в Android Studio

Вопрос новичка по Canvas в Android Studio

Ребятки, помогите, пожалуйста, новичку по Android

165
Spring boot не производит автонастройку бинов

Spring boot не производит автонастройку бинов

НЕ получается запустить проект на spring boot ругается что нету многих бинов

216
Как поменять int на char?

Как поменять int на char?

Есть значения int от 1 до 8Я хочу, что бы в соответствии со значением выводился символ char от a до h

238