![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 02.03.2008
Сообщений: 11
|
![]()
Привет!
На этом страницэ http://www.winpcap.org/docs/docs_40_...ce.html#l00148 есть вот такая структура 00148 struct pcap_if { 00149 struct pcap_if *next; 00150 char*name; 00151 char*description; 00152 struct pcap_addr *addresses; 00153 u_int flags; 00154 }; Может ли кто её обяснить. Ато никак немогу переписать под PowerBasic ![]() |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Описывается структура pcap_if.
Первым элементом в ней идёт указатель на такую же структуру. Вторым элементом идёт указатель на символьный массив(строку) Третий элемент всё тот же указатель на строку. Четвёртый элемент - указатель на структуру типа pcap_addr. Пятым элементом очевидно есть беззнаковая целочисленная переменная |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 02.03.2008
Сообщений: 11
|
![]()
Описывается структура pcap_if.
Первым элементом в ней идёт указатель на такую же структуру. Как это??? struct test { struct test *next; }; И как это будет работать!? |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Да очень просто) Указатель для всех типов имеет определённый размер(на 32-х битных машинах он равен 4 байтам), то есть размер структуры компилятор вполне способен вычислить на стадии компиляции. В данном случае он будет 20 байт.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 02.03.2008
Сообщений: 11
|
![]()
Если я всьо правилно понял, то вид оно имеет следущий.
pcap_if 1. next* = 4 byte (point pcsp_if) 2. name* = 4 byte (point char) 3. description* = 4 byte (point char) 4. addresses* = 4 byte (point pcap_addr) 5. flags = 2 byte Если все так, тогда первые 4 байта указывают на саму структуру!? И ещё, если указатель 4 байта, тогда зачем char во 2,3 строках. |
![]() |
![]() |
![]() |
#6 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
обычно так указывается на символьную строку с терминальным нулем в конце. Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
последний(5) элемент тоже будет 4 байта, на 32-х битных машинах(по меньшей мере на большинстве).
В первые четыре байта можно будет положить адрес, который будет указывать на память размером в 20 байт. Описание этого указателя как struct pcap_if нужно лишь для удобного доступа к этой памяти. Раз он описан так, то тогда становится возможным нечто вроде такого: Код:
* - спецификатор указателя. Но компилятор не знает, сколько именно брать байт из памяти, на какую он указывает. Для этого ввели указание типа перед *, дабы было ясно с каким кол-ством байт работать по данному адресу. char* c - указатель на память. c + 1 - будет указывать на следующий байт относительно начала. char sym = *c; возьмёт 1 байт по адресу. int* i - точно так же, как и char* есть указатель на память. i+1 указывает на следующие 4 байта, относительно начала. int integer = *i; возьмёт 4 байта по адресу даже более того: Код:
Последний раз редактировалось netrino; 11.10.2009 в 20:55. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 02.03.2008
Сообщений: 11
|
![]()
Угу! тут то разобрался!
Возник следующий вопрос! 00161 struct pcap_addr { 00162 struct pcap_addr *next; 00163 struct sockaddr *addr; 00164 struct sockaddr *netmask; 00165 struct sockaddr *broadaddr; 00166 struct sockaddr *dstaddr; 00167 }; Как понять ету структуру? |
![]() |
![]() |
![]() |
#9 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
А что именно в ней непонятно?) Точно так же, как и с предыдущей, только все 5 элементов являются указателями на структуры
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 02.03.2008
Сообщений: 11
|
![]()
Все кроме sockaddr, необявлена!
А может быть, что sockaddrобявлена в (например) stdio.h Последний раз редактировалось Shadovv13; 11.10.2009 в 21:41. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Структуры | masha.dongyz | Помощь студентам | 2 | 19.12.2011 20:29 |
С++ структуры | KOLYTFR | Помощь студентам | 2 | 24.05.2009 19:02 |
Структуры | BaSk | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 16.05.2009 15:33 |
Структуры | Centyrion | Общие вопросы C/C++ | 4 | 06.05.2008 20:33 |
Структуры в С++ | bloo[d] | Помощь студентам | 1 | 30.01.2008 22:27 |