Информация об изменениях

Сообщение Re[5]: Пишу функции для обработки массивов на с++ от 17.10.2020 23:52

Изменено 18.10.2020 0:08 AleksandrN

Re[5]: Пишу функции для обработки массивов на с++
Здравствуйте, Gaxis, Вы писали:

G>Что касается указателей то я и в начале темы написал про то что мои функции отрегулированы на стандартные типы данных, т.к. основная задача построить специфику, что уже даёт понять что может быть всякое, тут 2 варианта использовать типы данных которые будут помещать указатели что сделает код универсальным либо переписать типы из своей платформы.


Это я и имел в виду, когда писал про непонимание типов данных. Указатель — стандартный тип данный на C и C++.

А код
int Q=(int)new int[10];

и обёртки для работы с ним не универсальные и чреваты проблемами.

На 32-х разрядной системе сработает, но не уверен, что на всех платформах.
На 64-х разрядных потеряются 4 байта адреса и потом будет непонятно, где искать массив, под который выделена память.
На 16-разрядной (такие системы и сейчас встречаются, но узко-специализированные) сработает, но будет использоваться 2 лишних байта, а ресурсы у таких систем очень ограничены.
Re[5]: Пишу функции для обработки массивов на с++
Здравствуйте, Gaxis, Вы писали:

G>Что касается указателей то я и в начале темы написал про то что мои функции отрегулированы на стандартные типы данных, т.к. основная задача построить специфику, что уже даёт понять что может быть всякое, тут 2 варианта использовать типы данных которые будут помещать указатели что сделает код универсальным либо переписать типы из своей платформы.


Это я и имел в виду, когда писал про непонимание типов данных. Указатель — стандартный тип данный на C и C++.

А код
int Q=(int)new int[10];

и обёртки для работы с ним не универсальные и чреваты проблемами.

На 32-х разрядной системе сработает, но не уверен, что на всех платформах.
На 64-х разрядных потеряются 4 байта адреса и потом будет непонятно, где искать массив, под который выделена память.
На 16-разрядной (такие системы и сейчас встречаются, но узко-специализированные) сработает, но будет использоваться 2 лишних байта, а ресурсы у таких систем очень ограничены.

И, предыдущие 3 предложения, актуальные для наиболее распространённых платформ, но не уверен, что для всех.
Стандарт языка требует, что бы sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long), но не задаёт жёстко размеры типов. А размер указателя зависит от аппаратной платформы. А в некоторых случаях могут быть свои особенности, как например, было на i386 — там были ближний указатель и дальний, разного размера. И при приведении типов надо понимать, что делаешь, особенно при приведении указателя к целому типу.