The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как правильно подвинуть указатель на несколько байт?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как правильно подвинуть указатель на несколько байт?"
Сообщение от Serezha Искать по авторуВ закладки(??) on 13-Апр-04, 19:12  (MSK)
Я делаю что-то вроде:
есть указатель void *p; Он уже куда-то установлен.
Подвигаю его на n байт в сторону увеличения адреса:
p = (void*)((unsigned long)p + n);
Это, вроде, работает, но мне кажется, что это неправильно.
Делают ли так? Как сделать правильно?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как правильно подвинуть указатель на несколько байт?"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 13-Апр-04, 20:12  (MSK)
>Подвигаю его на n байт в сторону увеличения адреса:
>p = (void*)((unsigned long)p + n);

Это не на n байт. Это на n * sizeof(unsigned long) байт.
Для продвига на n байт (то бишь по-Сишному чаров):
  p = (char*)p + n;

>Это, вроде, работает, но мне кажется, что это неправильно.
>Делают ли так? Как сделать правильно?

Учи матчасть. Любое начальное посибие по языку C, раздел
"арифметика указателей".

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как правильно подвинуть указатель на несколько байт?"
Сообщение от vnp emailИскать по авторуВ закладки on 13-Апр-04, 21:01  (MSK)
>>Подвигаю его на n байт в сторону увеличения адреса:
>>p = (void*)((unsigned long)p + n);
>
>Это не на n байт. Это на n * sizeof(unsigned long) байт.

С чего бы это? На n и продвинется. Это ж (unsigned long), а не (unsigned long *). Другое дело, что преобразование указателя в число и обратно теоретически unsafe, и кое-где (теоретически) может грохнуться (я такого еще не видел).

>Для продвига на n байт (то бишь по-Сишному чаров):
>  p = (char*)p + n;

Так, однако, точнее.

>>Это, вроде, работает, но мне кажется, что это неправильно.
>>Делают ли так? Как сделать правильно?
>
>Учи матчасть. Любое начальное посибие по языку C, раздел
>"арифметика указателей".


  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как правильно подвинуть указатель на несколько байт?"
Сообщение от Serezha Искать по авторуВ закладки(??) on 14-Апр-04, 09:00  (MSK)
>>Для продвига на n байт (то бишь по-Сишному чаров):
>>  p = (char*)p + n;
>
>Так, однако, точнее.

Это вообще работать не будет (ни один компилятор не пропустит), так как указатель (адрес) складывается с целым числом.

Еще вот такая вещь лезет в голову: p = &((char*)p)[n];
Интересно, а если не c++ использовать, а обычный c, то как в нем правильно это сделать?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как правильно подвинуть указатель на несколько байт?"
Сообщение от gt emailИскать по авторуВ закладки(ok) on 14-Апр-04, 10:31  (MSK)
>>>Для продвига на n байт (то бишь по-Сишному чаров):
>>>  p = (char*)p + n;

>Это вообще работать не будет (ни один компилятор не пропустит),

ты пробовал? попробуй сначала.

>Еще вот такая вещь лезет в голову: p = &((char*)p)[n];

хорошо, что это только в твою голову лезет :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как правильно подвинуть указатель на несколько байт?"
Сообщение от Serezha Искать по авторуВ закладки(??) on 14-Апр-04, 15:46  (MSK)
>>>>  p = (char*)p + n;
>
>>Это вообще работать не будет (ни один компилятор не пропустит),
>
>ты пробовал? попробуй сначала.

Заблуждался. Действительно работает. Работает даже (char*)p += n;

>>Еще вот такая вещь лезет в голову: p = &((char*)p)[n];
>хорошо, что это только в твою голову лезет :)

Ну это - всем по разному, мне-то уж точно от этого ничего хорошего нет ;)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру