powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Зачем компилятору языка С знать на какой тип указывает указатель.
6 сообщений из 56, страница 3 из 3
Зачем компилятору языка С знать на какой тип указывает указатель.
    #38806516
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryв конкретной операционной системе, может ли указатель в С/С++ на разные объекты занимать разный объём памяти. Если да, то приведите пожалуйста конкретный пример.да ё, размер указателя зависит от платформы, а не от языка. Поэтому, если платформа имеет указатели разного размера, то и язык, на ней реализованный, должен это позволять. Пример от WhiteOwl это никакой не UB, а вполне себе допустимая ситуация на 16-разрядных DOS ( и Windows16, кстати, тоже ).
Стандарт не может постулировать размер указателя, очевидно же.

Спасибо.

Доброго времени суток C:
...
Рейтинг: 0 / 0
Зачем компилятору языка С знать на какой тип указывает указатель.
    #38806933
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.NETSashaMercuryХотя вот вам ещё пример.
Код: plaintext
1.
2.
int* a[10];
int (*b)[10];



в чём разница ?

Поскольку a[10] - это указатель на int, то int* a[10] - это указатель на указатель на int, то есть int **a, насколько я понял.
При увеличении этого указателя на 1, он сдвинется на количество байт равное длине указателя.

А int (*b) [10] это указатель на 10 целых int, при увеличении его на 1, он сдвинется на sizeof(int)*10 байт.

то что я выделил красным мне не очень понравилось.
Код: plaintext
1.
2.
int* a[10];
int *a1[10];



что a,что a1 есть массивы из 10 указателей на int. а и a1 указатель на указатель.

а как будет "читать" система второй участок кода ?
Код: plaintext
1.
int (*b) [10];



PS
тот алгоритм, что вы привели для функции swap, будет работать только для тех типов данных, для которых можно выполнить операцию побитового исключающего или(т.е. операнды функции будут целочисленные), вы не сможете, например, переделать его для double. с классической функцией таких проблем нет.
Код: plaintext
1.
2.
3.
4.
5.
6.
void swap(T* a,T* b)
{
   T temp=*a;
   *a=*b;
   *b=temp;
}
...
Рейтинг: 0 / 0
Зачем компилятору языка С знать на какой тип указывает указатель.
    #38806966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то был еще один боянчик. Вот.

15464736
...
Рейтинг: 0 / 0
Зачем компилятору языка С знать на какой тип указывает указатель.
    #38807729
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovSashaMercuryЯ рассуждаю так. У нас есть определённая адресация реализованная для заданной ОС, потому я точно знаю, сколько байт занимает адрес(т.е. мы имеем константу для размера адреса памяти).Неправильно вы рассуждаете.
В x86 - сегментная память, поэтому существуют NEAR16, NEAR32, FAR16 и FAR32. NEAR32 и FAR16 - одинаковы по размеру, но различаются по интерпретации.
еще там есть huge...
...
Рейтинг: 0 / 0
Зачем компилятору языка С знать на какой тип указывает указатель.
    #38807770
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivеще там есть huge...Это FAR16 с отдельными сегментами для стека и данных.
...
Рейтинг: 0 / 0
Зачем компилятору языка С знать на какой тип указывает указатель.
    #38807962
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.NETТо есть можно ли создать в программе два указателя с разным размером.
Чтобы sizeof(type1*) == sizeof(type2*) было ложно.

В некоторых гарвардских архитектурах для некоторых моделей памяти размеры указателей различаются. Пример: AVR, компилятор IAR, размер указателя на память данных 8/16 бит, на память программ — 16/24 бит в зависимости от опций компиляции.
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Зачем компилятору языка С знать на какой тип указывает указатель.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]