У меня есть структура tcp_option_t, которая составляет N байтов. Если у меня есть указатель tcp_option_t* opt, и я хочу, чтобы он увеличивался на 1, я не могу использовать opt++ или ++opt, поскольку он будет увеличиваться на sizeof(tcp_option_t), что является N.

Я хочу переместить этот указатель только на 1 байт. Мое текущее решение

opt = (tcp_option_t *)((char*)opt+1);

Но это немного хлопотно. Есть ли способы лучше?

16
misteryes 16 Май 2013 в 06:28
Это, наверное, единственное решение.
 – 
Yuushi
16 Май 2013 в 06:33
5
Вы действительно не хотите этого делать ... или, может быть, почему вы думаете, что хотите это делать (потому что вы действительно не хотите этого!)?
 – 
Jonathan Leffler
16 Май 2013 в 06:47
Нет, это правильный способ сделать это. Но зачем вам это нужно?
 – 
Lee Daniel Crocker
16 Май 2013 в 08:17

1 ответ

Лучший ответ

Я предлагаю вам создать указатель на char и использовать его для пересечения вашей структуры.

char *ptr = (char*) opt;
++ptr; // will increment by one byte

Когда вам нужно снова восстановить структуру из ptr, просто выполните обычное приведение:

opt = (tcp_option_t *) ptr;
16
Amadeus 16 Май 2013 в 07:51