Указатели и типы данных - PullRequest
       1

Указатели и типы данных

0 голосов
/ 28 декабря 2018

У меня следующий вопрос.

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

Мои мысли: это потому, что мы предполагаем, что указатель тоже int, или, может быть, потому, что если мы добавим double, то увеличим его длину?

Спасибо за ваше время.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Вы не можете добавить двойной * (указатель) к int * (указатель) через условные обозначения C. Указатель содержит значение адреса памяти ["сохраняет / указывает на адрес другой переменной"] это значениепо сути определяется его типом в данном случае int (4 байт-блока памяти, если я помню).Double - это 64-битный тип данных с плавающей точкой с двойной точностью.Просто не могу сделать это с самых "аппаратных" уровней.

0 голосов
/ 28 декабря 2018

Мои мысли: это потому, что мы предполагаем, что указатель тоже int, или, может быть, потому, что если мы добавим double, то увеличим его длину?

Если вы посмотрите на документация в нем говорится:

Определенные операторы сложения, вычитания, увеличения и уменьшения определены для указателей на элементы массивов : такие указатели удовлетворяют требованиям LegacyRandomAccessIterator иразрешите алгоритмам библиотеки C ++ работать с необработанными массивами.

(выделение мое), и вы должны помнить, что:

*(ptr + 1)

равно:

ptr[1]

и индексы для массивов являются целыми числами, поэтому язык не определяет операции с указателями с операндами с плавающей запятой, поскольку это не имеет никакого смысла.

0 голосов
/ 28 декабря 2018

Вы почти ответили на свой вопрос сами: указатель является адресом памяти.Адрес памяти является целым числом.Вы можете добавить целые числа к целым числам и получить целые числа в результате.Добавление числа с плавающей точкой к целому числу дает число с плавающей точкой, которое нельзя использовать в качестве адреса памяти.

Например, char *x = 0; - это адрес одного байта;Что бы char *y = 0.5; значило бы?Байт, который так или иначе состоит из второй половины байта по адресу 0 и первой половины байта по адресу 1 ??Это может иметь смысл, но как насчет char *x = 3.1415926; или любого подобного числа с плавающей точкой ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...