Почему мы должны преобразовывать все в символ *, когда записываем его в файл? - PullRequest
2 голосов
/ 16 апреля 2009

Из любопытства, почему мы конвертируем что-то в символ *, когда записываем это в (двоичный) файл?

Ответы [ 4 ]

15 голосов
/ 16 апреля 2009

Поскольку типичные функции ввода / вывода пишут, возьмите указатель на char. Это потому, что кто-то считает, что наиболее представительный способ говорить о данных, хранящихся в двоичном файле; это просто последовательность самых маленьких адресных слов машины, по порядку. Имя типа C для этого: char.

7 голосов
/ 16 апреля 2009

char* просто представляет указатель на начало последовательности байтов, и это именно то, что ожидается от двоичного файла.

2 голосов
/ 16 апреля 2009

Вы говорите о fread() и fwrite()? Данные, которые они читают или записывают, передаются как void* (или const void*), поэтому вам не нужно конвертировать.

Но в C ++, когда вы используете, скажем, istream::read(), указатель на приемный буфер должен быть передан как char*, поэтому неявное преобразование отсутствует.

2 голосов
/ 16 апреля 2009

Unwind и vezult уже ответили на ваш вопрос, и я предполагаю, что вы знаете, что такое указатель. Но на тот случай, если вы думаете о * преобразовании чего-либо в символ ** как операции, которая фактически каким-то образом изменяет ваши данные в памяти (и, например, может занять больше времени, если данных много), то обратите внимание, что это не поведение получения указателя.

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