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

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

29.10.2016, 21:18. Просмотров 340. Ответов 4
Метки нет (Все метки)

Объясните пожалуйста вот эту строчку кода
Код
return allocp -n:
Почему просто не возвратить указатель на блок выделенной памяти,а возвращать разность ? Что такое возвратить разность указателя и целого числа,ведь это даст число байтов а функция возвращает указатель?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#
define
ALLOCSIZE
10000 /* размер доступного пространства */
static char allocbuf[ALLOCSIZE]; /* память для alloc */
static
char
*
allocp
= 
allocbuf
; /* указатель на своб. место */
char
*
alloc
(
int
n
) /* возвращает указатель на п символов */
{
if (allocbuf + ALLOCSIZE 
-
allocp >= n) {
allocp += n; /* пространство есть */
return allocp 
-
n; /* старое р */
} 
else
/* пространства нет */
return
0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2016, 21:18
Ответы с готовыми решениями:

Адресная арифметика
Можно ли в C++ в массиве произвольного типа использовать адресную арифметику?Например, так: ...

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

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

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

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

4
HighPredator
5692 / 2011 / 723
Регистрация: 10.12.2010
Сообщений: 5,778
Записей в блоге: 3
29.10.2016, 22:12 2
Цитата Сообщение от Yotz Посмотреть сообщение
Почему просто не возвратить указатель на блок выделенной памяти,а возвращать разность ?
Потому, что указатель allocp в строке 24 сместился на n.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,318
29.10.2016, 22:34 3
Цитата Сообщение от Yotz Посмотреть сообщение
разность указателя и целого числа,ведь это даст число байтов
Это откуда вы такое взяли? Вычитание целого числа из указателя дает сдвинутый указатель, а не какое-то "число байтов".

Приведенный код сначала сдвигает указатель границы выделенной памяти вперед, на новое место (allocp += n), а потом при помощи вычитания allocp - n получает его старое положение для использования в качестве результата функции.
0
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
30.10.2016, 07:32 4
Цитата Сообщение от Yotz Посмотреть сообщение
разность указателя и целого числа,ведь это даст число байтов
не,число байтов будет: (разность)*(sizeof(тип на который указывает указатель))
0
Yotz
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 2
30.10.2016, 07:36  [ТС] 5
Я уже разобрался со всем сам,благодарю вас. Я перепутал просто,это разность указателей дает кол-во байтов.
0
30.10.2016, 07:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2016, 07:36

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

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

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


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

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

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