Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/17: Рейтинг темы: голосов - 17, средняя оценка - 4.82
fins
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 14
1

Адресная арифметика

18.07.2010, 12:15. Просмотров 3059. Ответов 12
Метки нет (Все метки)

Можно ли в C++ в массиве произвольного типа использовать адресную арифметику?Например, так:
C
1
2
3
TYPE*t;
int c;
t+=c*sizeof(TYPE);
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2010, 12:15
Ответы с готовыми решениями:

адресная арифметика
int funk(char *s) { char *p=s; while(*p) p++; return p-s; } Если...

Адресная арифметика
Объясните пожалуйста вот эту строчку кода return allocp -n: Почему просто не возвратить...

[Задача] Адресная арифметика
Просьба к модераторам: НЕ надо перетаскивать в разделы типа "Си\Си++ для экспертов" Пример...

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

Указатели и адресная арифметика
Язык C. Задание звучит так: 2) Для этого фрагмента программы написать значения каждой переменной...

12
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 12:18 2
Цитата Сообщение от fins Посмотреть сообщение
Можно ли в C++ в массиве произвольного типа использовать адресную арифметику?
Можно.
Цитата Сообщение от fins Посмотреть сообщение
Например, так:
C
1
2
3
TYPE*t;
int c;
t+=c*sizeof(TYPE);
Так не получится. Размер учитывается автоматически:
C++
1
2
3
Type* arr;
// ...
Type* element2 = arr + 2; // arr + n интерпретируется как arr + n * sizeof(Type)
1
fins
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 14
18.07.2010, 12:53  [ТС] 3
Не совсем понял, вот так?
C++
1
2
3
t=(TYPE*)(t+c);
t=(TYPE*)malloc(sizeof(TYPE));
t=(TYPE*)(t-c);
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 13:30 4
fins, лучше скажи чего ты хочешь добится с помощью адресной арифметики, чтобы был пример на котором ее можно рассмотреть.
0
fins
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 14
18.07.2010, 13:35  [ТС] 5
Хочу выделить память на с-й элемент массива типа TYPE.
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 13:44 6
fins, если идет речь об одномерном массиве, то память под элементы выделяется при выделении памяти под массив. И никаким образом ты ее не расширишь.
0
fins
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 14
18.07.2010, 13:57  [ТС] 7
Нет, я хочу выделить память на новый (последний) элемент этого массива.
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 14:15 8
Цитата Сообщение от fins Посмотреть сообщение
Нет, я хочу выделить память на новый (последний) элемент этого массива.
Еще раз - память под массив (его элементы) выделяется единожды, кусок выделенной памяти расширить штатными средствами C++ невозможно.
В случае необходимости добавления нового элемента в массив рамера n обычно делается следующее:
1. Выделяется память размером n + 1 под новый массив.
2. n елементов исходного массива копируются в новый массив.
3. Удаляется исходный массив.
4. Элемент для добавления копируется в последнюю ячейка нового массива.
Если массив должен переодически изменять свой размер, а наличие возможности доступа к элементам массива по индексу не критично, стоит подумать над заменой массива списком.
0
fins
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 14
18.07.2010, 14:37  [ТС] 9
А почему нельзя добавлять новый элемент? Если массив типа double или char, то можно написать
C++
1
2
3
4
double a[n];
a+=n;
a=(double*)malloc(sizeof(double));
a-=n;
0
alex_x_x
бжни
2456 / 1663 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 14:50 10
зачем задавать риторические вопросы - спросите у компилятора, он все скажет по поводу вашей программы
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 15:05 11
Цитата Сообщение от fins Посмотреть сообщение
А почему нельзя добавлять новый элемент?
Куда ты его добавишь? Память уже выделена, где - неизвестно, что лежит сразу за выделенным участком тоже.
И еще, если ты пишешь на C++ - пиши на C++, не тяни за собой malloc и прочее наследие Си.
0
Evg
Эксперт CАвтор FAQ
19789 / 7429 / 560
Регистрация: 30.03.2009
Сообщений: 20,702
Записей в блоге: 30
18.07.2010, 17:48 12
Я так понимаю, ему нужен realloc?
0
easybudda
Модератор
Эксперт CЭксперт С++
10247 / 6137 / 1544
Регистрация: 25.07.2009
Сообщений: 11,678
18.07.2010, 22:44 13
Цитата Сообщение от Evg Посмотреть сообщение
Я так понимаю, ему нужен realloc?
Похоже на то... Но в С++ с realloc() не задалось. new/delete/new[]/delete[] - всё, что есть в этом плане
fins, а чем динамические контейнеры не устраивают? (vector/list/set/etc...)
0
18.07.2010, 22:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2010, 22:44

Указатели и адресная арифметика
Помогите с заданием Язык C. Задание звучит так: 2) Для этого фрагмента программы написать...

Адресная арифметика и массивы
Нужно с помощью указателя организовать ввод и вывод матрицы. Индексную адресацию не использовать....

Адресная арифметика: поиск max элемента массива
Здравствуйте! Это программа находит максимальный элемент из введеного массива. Программа работает и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru