0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Работа со структурами04.06.2013, 15:56. Показов 3261. Ответов 50
Метки нет (Все метки)
Только изучаю С++ (раньше довольно неплохо программил на Делфи) и столкнулся с вопросом.
Допустим есть две структуры:
0
|
04.06.2013, 15:56 | |
Ответы с готовыми решениями:
50
Работа со структурами Работа с структурами Работа со структурами Работа со структурами |
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|
05.06.2013, 00:46 [ТС] | 21 |
Вот я так и думал. Но тогда давайте ещё раз проясним на моём примере. Итак есть указатель *р на структуру ABC_CONT_STATE. Получается p[0] - это грубо говоря указатель на параметр Symb этой структуры, а р[1] - это грубо говоря указатель на параметр Fr.
Правильно я понял?
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
05.06.2013, 01:15 | 22 |
Нет. Грубо говоря, указатель - это адрес. Есть указатель на структуру ABC_CONT_STATE - p (адрес в памяти). Что в этой памяти из кода не видно. Может быть всё что угодно, но указатель будет вести себя, как указатель на структуру ABC_CONT_STATE. Т.е., если сделать ++p, то арес p станет больше на размер структуры ABC_CONT_STATE.
Так как указатель p - это указатель на структуру, то смещение i будет равно размеру структуры. Тогда: p[0] - содержимое по адресу p cо смещением 0, р[1] - содержимое по адресу p cо смещением 1 (по адресу p + размер структуры в байтах). Добавлено через 5 минут Если p - это адрес начала массива структур, то p[0] - это первая структура, p[1] - вторая и т.д. Добавлено через 5 минут p[0].Symb - поле Symb первой структуры, p[0].Fr - поле Fr первой структуры, p[1].Symb - поле Symb второй структуры, p[1].Fr - поле Fr второй структуры,
1
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|
05.06.2013, 10:06 [ТС] | 23 |
Спасибо. Очень толково разжёванный ответ. Вы мне очень помогли.
Мне теперь осталось разобраться с р[-1], но тут наверное чисто опытным путём. Интересно, на Делфи это как бы выглядело...?
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
05.06.2013, 10:37 | 24 |
Разобраться как работает код? При таком обращении (p[-1]) важно знать, что в памяти находится перед структурой ABC_CONT_STATE, не думаю, что для алгоритма шифрования, всё равно, что там лежит. Перед объявлением ABC_CONT_STATE ещё что-то объявлялось?
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|||||||||||
05.06.2013, 11:34 [ТС] | 25 | ||||||||||
Разве что директива #pragma pack(1)
А в функции переменная определена так:
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||
05.06.2013, 11:58 | 26 | ||||||||||
Из этих кусков ничего не понять. Вот здесь:
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|||||||||||
05.06.2013, 12:38 [ТС] | 27 | ||||||||||
Привязка это я так понимаю следующий код:
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|
05.06.2013, 13:00 [ТС] | 29 |
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||||||||||||
05.06.2013, 13:13 | 30 | |||||||||||||||
Тогда нужно знать с каким адресом связан указатель Stat в структуре, которая передаётся в функцию. Странный код. Откуда взяли? Вот эту строку:
Это можно записать так:
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|||||||||||||||||||||||||||||||
05.06.2013, 15:12 [ТС] | 31 | ||||||||||||||||||||||||||||||
Для закрепления материала. Попробую под Вашим чутким руководством перевести структуру с С++ в Delphi
Итак, исходная структура:
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
|||||||||||||||||||||
06.06.2013, 12:25 [ТС] | 33 | ||||||||||||||||||||
Ещё небольшой вопрос по структурам. Допустим объявлены переменные:
0
|
06.06.2013, 12:31 | 34 |
Нет, конечно! Обе строки выполняются одна за другой. Где ты видишь if ?!
Короче, я смотрю ты даже основ Си не знаешь. Зачем пытаешься мутить что-то с указателями? Бери книгу по Си/Си++ и читай её по-порядку и с самого начала!
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
||||||
06.06.2013, 12:52 [ТС] | 35 | |||||
Я вижу вот это сравнение:
Иначе что означает знак ">" ? Я книгу по С++ читал и там где про сравнение, сказано, что знак ">" означает больше? Что уже что-то поменялось?
0
|
06.06.2013, 14:23 | 36 |
> Это не просто знак, это оператор.
А любой оператор возвращает значение (результат). Так что почитай ещё раз книжку по С/С++, особенно обращай внимание на операторы.
0
|
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 24
|
||||||
06.06.2013, 14:48 [ТС] | 38 | |||||
Почитай, почитай...
Вот и почитайте (MSDN): Оператор > (Справочник по C#) Visual Studio 2012 Во всех числовых типах и типах перечислений определен оператор сравнения "больше" (>), который возвращает значение true, если первый операнд больше второго, в противном случае возвращается значение false. А Вы думаете я не знал, что он возвращает значение (true/false)? А конструкция if a > b then в случае, ели а > b возвратит не тоже самое true/false? Зачем запутывать меня? Объясните толком смысл вот этого арифметического выражения:
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|||||||||||
06.06.2013, 14:52 | 39 | ||||||||||
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
06.06.2013, 16:44 | 40 |
fominov, вы форумом не ошиблись? Тут - С++. Я уже писал, что код странный, а вы его ещё пытаетесь на другой язык переводить.
Машина оперирует числами (это для нас true/false), поэтому true/false имеют числовое представление. Вот что стандарт пишет:
0
|
06.06.2013, 16:44 | |
06.06.2013, 16:44 | |
Помогаю со студенческими работами здесь
40
Работа со структурами Работа со структурами Работа со структурами Работа со структурами Работа со структурами Работа со структурами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |