|
|
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
Привет всем! Немогу понять описание данной структуры typedef struct CvMemBlock { struct CvMemBlock* prev; struct CvMemBlock* next; } CvMemBlock; Буду рад услышать объяснения :) Сенкс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 21:07 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
На самом деле это кривое описание структуры. Лучше описывать так: Код: plaintext 1. 2. 3. 4. А чтобы понять как это работет, разбей описание на две части: Код: plaintext 1. 2. 3. 4. 5. 6. Вторая - задает для struct _CvMemBlock псевдоним CvMemBlock Дальше в программе уже можно создавать переменные, причем через любое из имен структуры: Код: plaintext 1. Ну и их можно связывать между собой: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 21:18 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
Да. но какого размера будет выделятся память под переменные данного типа, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 21:47 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
тот самыйДа. но какого размера будет выделятся память под переменные данного типа, Элементы структуры это просто указатели. Сама структура - два указателя. На 32-х битной платформе указатели четырех байтовые. То есть переменные a и b из моего примера будут обе по восемь байт каждая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 21:52 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
хорошо, если я в добавок определю следующюю структуру: typedef struct another { struct another* prev; struct another* next; } another; Затем создам указатели и переменные на описанную ранее структуру и новую. Например: CvMemBlock* pa; another* pb; CvMemBlock a; another b; допустимы ли следующие действия:? pa=&b; pb=&a ??????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 23:48 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
White OwlНа самом деле это кривое описание структуры. Лучше описывать так: Код: plaintext 1. 2. 3. 4. Так писать ни разу не лучше. Потому что 1. не надо использовать ведущие подчеркивания в идентификаторах. Они зарезервированы под нужды реализации. 2. Не надо реализовывать связанный список, надо использовать std::list Если уж так хочется самому список воять: 3. Магия со словами typedef и struct для совместимости с Си. Пишите проще Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 00:10 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
тот самыйдопустимы ли следующие действия:? pa=&b; pb=&a Нет. Не допустимы. Структуры между собой конечно полностью идентичны, но без явного приведения типов их друг-другу присваивать нельзя. Можно так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 01:02 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
griegТак писать ни разу не лучше. Потому что 1. не надо использовать ведущие подчеркивания в идентификаторах. Они зарезервированы под нужды реализации.Ошибаешься. Никакой резервации нету. Зато в объявлении struct _MyType сразу видно что это вспогательное имя которое будет впоследствии перекрыто typedef'ом. grieg2. Не надо реализовывать связанный список, надо использовать std::listТак уж прямо и "не надо"? Правильно, зачем учится ходить если можно на автобусе доехать. grieg3. Магия со словами typedef и struct для совместимости с Си.Магия? Ну да, ну да... мудрецы древности заклинания умели придумывать а колдуны современности зубрят заклинания на непонятных языках. grieg4. Хорошо бы определить конструктор/деструктор. Запретить/определить конструктор копирования и оператор присваивания.да, обернуть это все формочкой, присобачить туда сиквелов парочку и еще какой-нибудь вебсайтик встроенный и будет зашибись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 01:16 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. Вышеприведенная структура есть ни что иное, как элемент двусвязанного списка, используеый для того, чтобы реализовать алгоритм динамического выделения памяти небольшими кусками. Здесь prev - это указатель на предыдущий выделенный блок (для первого блока prev = NULL), next - указатель на следующий блок (для последнего блока next = NULL). Размер блока в байтах можно вычислить как Код: plaintext 1. Структура может использоваться, например, в реализации функции malloc (). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 14:25 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
да, но чему будет равно выражение sizeof (CvMemBlock) ??? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 15:28 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
тот самыйда, но чему будет равно выражение sizeof (CvMemBlock) ??? :) Откомпелируй и посмотри. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 15:31 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
тот самыйПривет всем! Немогу понять описание данной структуры typedef struct CvMemBlock { struct CvMemBlock* prev; struct CvMemBlock* next; } CvMemBlock; Буду рад услышать объяснения :) Сенкс. это классический двусвязный список :) условно - цепочка, каждое звено которой содержит указатели на предыдущий и последующий элемент. для первого элемента списка prev == null, для последнего next == null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 17:42 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
например, здесь расписано с картинками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 17:46 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
aak__ тот самыйПривет всем! Немогу понять описание данной структуры typedef struct CvMemBlock { struct CvMemBlock* prev; struct CvMemBlock* next; } CvMemBlock; Буду рад услышать объяснения :) Сенкс. это классический двусвязный список :) условно - цепочка, каждое звено которой содержит указатели на предыдущий и последующий элемент. для первого элемента списка prev == null, для последнего next == null Уже второй человек пишет одно и то же А если это циклический двунаправленный список? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 17:46 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
да, извиняюсь, написал и только потом увидел аналогичный пост )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 17:49 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
White OwlОшибаешься. Никакой резервации нету. Зато в объявлении struct _MyType сразу видно что это вспогательное имя которое будет впоследствии перекрыто typedef'ом. "Никогда, никогда, вы слышите? -- никогда! -- не используйте имена, которые начинаются с подчеркивания или содержат двойное подчеркивание; эти имена зарезервированы для исключительного использования вашим компилятором и разработчиками стандартной библиотеки, чтобы избежать столкновения с такими же именами в вашем коде. ... Если быть более точным, то правило гласит, что любое имя с двойным подчеркиванием в любом месте ... или начинающееся с подчеркивания и прописной буквы ... являются зарезервированными. Если хотите, запомните это правило, на мой взгял проще просто полностью избегать двойных подчеркиваний и имен, начинающихся с подчеркивания." (С) Герб Саттер "Новые сложные задачи на С++", стр 236 Так уж прямо и "не надо"? Правильно, зачем учится ходить если можно на автобусе доехать. Зависит от целей. Если цель сугубо учебная, то можно и пореализовывать. Магия? Ну да, ну да... мудрецы древности заклинания умели придумывать а колдуны современности зубрят заклинания на непонятных языках. Магия не в смысле непонятности, а в смысле ненужного усложения. Пиши проще. да, обернуть это все формочкой, присобачить туда сиквелов парочку и еще какой-нибудь вебсайтик встроенный и будет зашибись. Это лишнее. Тем более, что это уже выйдет за рамки стандартного С++. Совет тоже списан у Саттера. Обоснование: это простой способ предохранить себя от ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 23:01 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
grieg White OwlОшибаешься. Никакой резервации нету. Зато в объявлении struct _MyType сразу видно что это вспогательное имя которое будет впоследствии перекрыто typedef'ом. "Никогда, никогда, вы слышите? -- никогда! -- не используйте имена, которые начинаются с подчеркивания или содержат двойное подчеркивание; эти имена зарезервированы для исключительного использования вашим компилятором и разработчиками стандартной библиотеки, чтобы избежать столкновения с такими же именами в вашем коде. ... Если быть более точным, то правило гласит, что любое имя с двойным подчеркиванием в любом месте ... или начинающееся с подчеркивания и прописной буквы ... являются зарезервированными. Если хотите, запомните это правило, на мой взгял проще просто полностью избегать двойных подчеркиваний и имен, начинающихся с подчеркивания." (С) Герб Саттер "Новые сложные задачи на С++", стр 236 Да, ты что! И что случиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 09:41 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
Akh Да, ты что! И что случиться? Ничего не случится, если этого правила придерживаться. В противном случае есть шанс, что на каком-то компиляторе программа не собирется. В данном примере вероятность этого мала. Для имени типа _List вероятность высока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 14:58 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
grieg Akh Да, ты что! И что случиться? Ничего не случится, если этого правила придерживаться. В противном случае есть шанс, что на каком-то компиляторе программа не собирется. В данном примере вероятность этого мала. Для имени типа _List вероятность высока. А если придержиться, то обязательно соберется? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 15:10 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
grieg Akh Да, ты что! И что случиться? Ничего не случится, если этого правила придерживаться. В противном случае есть шанс, что на каком-то компиляторе программа не собирется. В данном примере вероятность этого мала. Для имени типа _List вероятность высока. На это случай есть один хороший совет не надо в глобальном namespace писать, а так же в std и прочих, оперделяемых средой разработки. Пиши в своем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 15:16 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
grieg Akh Да, ты что! И что случиться? Ничего не случится, если этого правила придерживаться. В противном случае есть шанс, что на каком-то компиляторе программа не собирется. В данном примере вероятность этого мала. Для имени типа _List вероятность высока.Хочешь, я тебе тайну открою? С++ сочиняли теоретики а не практики, они не делали компиляторов сами. Все что они писали о реализациях - можешь смело забыть. В каждом языке, в каждом компиляторе есть кучка так называемых "зарезервированых" слов и далеко не все они начинаются с подчеркивания. Многие зарезервированые слова состоят из обычных латинских букв. Давай теперь запретим писать переменные латинскими буквами, а то вдруг случайно имя переменной совпадет с именем какой-нибудь конструкции (if например), вот здрово будет! Страуструп когда-то глупость сказанул, и теперь все около-плюс-плюсные писатели ее повторяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 17:43 |
|
||
|
Объясните плиз!!!
|
|||
|---|---|---|---|
|
#18+
White OwlХочешь, я тебе тайну открою? С++ сочиняли теоретики а не практики, Утверждение неверно. С++ сочинял в первую очередь Страуструп. Он же и писал первые компиляторы. К тому же Страуструп не только теоретик, но и практик безотносительно этого факта. Источник: Страуструп, "Эволюция С++". Список зарезервированных слов публикуется в каждом учебнике и в стандарте. Слово if туда входит, этого знания достаточно, чтоб не называть свои переменные этим именем. Использование других слов под нужды реализации свидетельствует об ошибке компилятора. Использование программистом зарезервированных слов под свои нужды говорит об ошибке программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 18:23 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34459598&tid=2029053]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 463ms |

| 0 / 0 |
