|
структуры в С, копирование в байтовый массив |
|
|
|
 |
Ответов
|
Apr 27 2007, 21:14
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sergeeff @ Apr 27 2007, 21:01)  К сведению: К чьему сведению? Это я спрашиваю по причине того, что Ваш пост несколько выбивается из темы и не совсем понятен. Цитата union - платформозависимая штука и в плане переносимости - большой вопрос. Прошу огласить проблемы с зависимостью и непереносимостью. Цитата если при этом не рарушается требования по выравниванию адресов (что имеет место в случае ARM'ов, например). В плане обсуждаемой "проблемы" это не существенно, поскольку начальные адреса структур и массивов всегда выравнены. Про изощренные способы доступа к элементам речь пока не идет.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 27 2007, 22:27
|
Местный
  
Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143

|
Цитата(zltigo @ Apr 27 2007, 22:14)  В плане обсуждаемой "проблемы" это не существенно, поскольку начальные адреса структур и массивов всегда выравнены. Про изощренные способы доступа к элементам речь пока не идет. 1. Проблемы когда не фсе функции стандарта языка поддерживаются в компиляторах - бывают. 2. Простое совмещение адресного пространства в памяти - массивов и структур - гораздо красивее и правильнее чем примитивное копирование - хотябы с точки зрения экономии ресурсов и памяти программ (процедура memcpy библиотечная и занимает эн-ое количество байт). Что мы тут из пустого в порожнее-то, а?
|
|
|
|
|
Apr 27 2007, 23:05
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(lks @ Apr 27 2007, 22:27)  Проблемы когда не фсе функции стандарта языка поддерживаются в компиляторах - бывают. Всему есть предел, те кто не поддерживают чего-то уже не существуют на рынке. Если есть пример живого компилятора - в студию. Искать его очень просто - у него в прототипе функции memcpy() второй аргумент должен отличаться от (const void *). Я за двадцать с лишним лет таких не встречал. Цитата Простое совмещение адресного пространства в памяти - массивов и структур - гораздо красивее и правильнее чем примитивное копирование Причем здесь красивее/не красивее? Повторяюсь - это две совершенно разные вещи не заменяющие друг друга. Как передача аргумента по значению не лучше/хуже и не красивее/уродливее передачи аргумента по ссылке. Используется то, что нужно в данный момент. Цитата Что мы тут из пустого в порожнее-то, а? Лично я на этом закончил, а разговоры разговаривал исключительно по причине того, что раздел с этой темой называется "В помощь начинающему". И в этом месте мне кажутся особо неуместными мутные повествования о каких-то "некоторых компиляторах" и извращениях.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 28 2007, 08:12
|
Местный
  
Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143

|
Цитата(zltigo @ Apr 28 2007, 00:05)  Лично я на этом закончил, Могли бы и не начинать. to all: А всеже интересно, когда указываете на структуру через амперсанд, какой тип данных должен иметь указатель? (пусть даже на для компилятора ИАР). Я пробовал сделать это на другом компиляторе у меня тоже не получилось. Умные люди подсказывают что тип указателя должен быть void. По идее в момент инициализации данных можно описать массив указателей типа void и потом амперсанд структуры присвоить первому элементу этого массива.
|
|
|
|
|
Apr 28 2007, 09:56
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(lks @ Apr 28 2007, 12:12)  А всеже интересно, когда указываете на структуру через амперсанд, какой тип данных должен иметь указатель? Поясните пожалуйста, что Вы подразумеваете под "указанием на структуру через амперсанд"? Цитата(lks @ Apr 28 2007, 12:12)  (пусть даже на для компилятора ИАР). От компилятора тут ничего зависеть не должно - это правила языка, компилятор, если он соответсвует Стандарту, должен выполнять предсказуемые действия. Иначе такой компилятор фтопку. Цитата(lks @ Apr 28 2007, 12:12)  Умные люди подсказывают что тип указателя должен быть void. Как это? Приведите пожалуйста пример? Цитата(lks @ Apr 28 2007, 12:12)  По идее в момент инициализации данных можно описать массив указателей типа void и потом амперсанд структуры присвоить первому элементу этого массива. Что такое "амперсанд структуры"? Это новый термин в языке? Покажите лучше, код, который имеете в виду, возможно, так будет понятнее и однозначее.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 28 2007, 11:11
|
Местный
  
Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143

|
Цитата(dxp @ Apr 28 2007, 10:56)  Поясните пожалуйста, что Вы подразумеваете под "указанием на структуру через амперсанд"? От компилятора тут ничего зависеть не должно - это правила языка, компилятор, если он соответсвует Стандарту, должен выполнять предсказуемые действия. Иначе такой компилятор фтопку. Как это? Приведите пожалуйста пример? Что такое "амперсанд структуры"? Это новый термин в языке? Покажите лучше, код, который имеете в виду, возможно, так будет понятнее и однозначее. unsigned char *ptr; struct BootSectorStruct { unsigned char JmpCmd[3]; unsigned char OEMName[8]; }; struct BootSectorStruct BootSector = {0xEB, 0x00, 0x90, "HaloWrld"}; ptr = &BootSector; for (i=0;i<11;i++) { MMCWRData[i] = *ptr; ptr++; } Хорошо, поясняю. Значок & - называется амперсанд, или оператор указания. Когда пишу "амперсанд структуры" - подразумеваю - &BootSector, т.е. получение адреса по которому располагается данные описанные в структуре. Этот пример кода взят (судя по всему) из учебника - автором темы. Никто не сомневается что он должен работать. Автор темы попытался применить его в ИАР компиляторе - результат: не работатет. Вопрос в том: почему он не работатет и развивая мысль дальше - неплохо бы сделать совмещение начала адресов массива и структуры в памяти - тогда необходимость копирования данных из одного места в другое автоматически отпадает. Так лучше?
|
|
|
|
|
Apr 28 2007, 12:46
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(lks @ Apr 28 2007, 10:11)  Вопрос в том: почему он не работатет и развивая мысль дальше - неплохо бы сделать совмещение начала адресов массива и структуры в памяти - тогда необходимость копирования данных из одного места в другое автоматически отпадает. Выделите наконец полчаса и прочитайте у Кернигана и Ритчи главу про указатели. Тогда вы поймете, что компилятор ругается правильно, узнаете какой тип имеет &BootSector, узнаете почему компилятор проглотит ptr = &BootSector; если ptr объявлен как void*, и узнаете почему в этом случае компилятор выругается на MMCWRData[ i ] = *ptr. Вы поймете что общего у массивов и указателей и как правильно объявив указатель можно получить совмещение начала адресов массива и структуры в памяти. Ведь, судя по вашим сообщениям в этой ветке, вы совершенно не имеете понятия об указателях. Но почему вы хотите, чтобы кто-то потратил гораздо больше времени, пересказывая тут эту главу для вас тут??? Если вам что-то будет непонятно у Кернигана и Ритчи - спрашивайте, с удовольствием объясним. Но сделайте сначала сами элементарное усилие. P.S. Какой, нафиг, пример из учебника, если судя по названию массива идет работа с MultiMedia Card?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
tolik_zp структуры в С Apr 26 2007, 16:05 o-henry код в студию Apr 26 2007, 16:10 tolik_zp Цитата(o-henry @ Apr 26 2007, 16:10)... Apr 26 2007, 16:16  o-henry а приведение типов кто делать будет?
ptr = (char*... Apr 26 2007, 16:30  dxp Цитата(tolik_zp @ Apr 26 2007, 20:16) вот... Apr 26 2007, 16:32  lks Попробуйте указать на переменную JmpCmd - т.е. ам... Apr 26 2007, 20:30   Сергей Борщ Цитата(lks @ Apr 26 2007, 19:30) Попробуй... Apr 26 2007, 22:25    lks Цитата(Сергей Борщ @ Apr 26 2007, 23:25) ... Apr 26 2007, 23:10     Сергей Борщ Цитата(lks @ Apr 26 2007, 22:10) Вопрос г... Apr 27 2007, 00:52   zltigo Цитата(lks @ Apr 26 2007, 20:30) а на пер... Apr 26 2007, 23:19 v_shamaev Цитата(tolik_zp @ Apr 26 2007, 17:05) Име... Apr 26 2007, 16:10 zltigo Цитата(tolik_zp @ Apr 26 2007, 16:05) поп... Apr 26 2007, 16:16 rezident Об чем сыр-бор? Явное приведение типов всяко лучше... Apr 27 2007, 01:40 tolik_zp всем спасибо, работает. век живи - век rtfm Apr 27 2007, 12:23  lks Цитата(tolik_zp @ Apr 27 2007, 13:23) все... Apr 27 2007, 18:45   zltigo Цитата(lks @ Apr 27 2007, 18:45) Приведит... Apr 27 2007, 18:57    lks Цитата(zltigo @ Apr 27 2007, 19:57) Для с... Apr 27 2007, 19:53     zltigo Цитата(lks @ Apr 27 2007, 19:53) Ну может... Apr 27 2007, 20:06       o-henry Цитата(lks @ Apr 28 2007, 10:11) Этот при... Apr 28 2007, 11:53        lks Цитата(o-henry @ Apr 28 2007, 12:53)... Apr 28 2007, 12:58         Сергей Борщ Цитата(lks @ Apr 28 2007, 11:58) Может ну... Apr 28 2007, 13:28       zltigo Цитата(lks @ Apr 28 2007, 11:11) Никто не... Apr 28 2007, 12:09       dxp Цитата(lks @ Apr 28 2007, 15:11) Значок ... Apr 28 2007, 14:01        lks Цитата(dxp @ Apr 28 2007, 15:01) Неверно.... Apr 28 2007, 15:22         dxp Цитата(lks @ Apr 28 2007, 19:22) Вот так,... Apr 28 2007, 17:21          lks Цитата(dxp @ Apr 28 2007, 18:21) P.P.S. Ч... Apr 28 2007, 21:34           rezident Цитата(lks @ Apr 29 2007, 00:34) typedef ... Apr 28 2007, 22:19          lks Цитата(dxp @ Apr 28 2007, 18:21) Какой пр... Apr 28 2007, 22:26           Legotron Цитата(lks @ Apr 28 2007, 23:26) И все же... Apr 28 2007, 22:58            lks Цитата(Legotron @ Apr 28 2007, 23:58) Я д... Apr 29 2007, 14:26             zltigo Цитата(lks @ Apr 29 2007, 14:26) Возможно... Apr 29 2007, 15:29              lks Цитата(zltigo @ Apr 29 2007, 16:29) Подск... Apr 29 2007, 15:49               Сергей Борщ Ладно, я еще поприкалываюсь
Цитата(lks @ Apr ... Apr 29 2007, 18:02                lks Цитата(Сергей Борщ @ Apr 29 2007, 19:02) ... Apr 29 2007, 19:24                 zltigo Цитата(lks @ Apr 29 2007, 19:24) Что тоже... Apr 29 2007, 19:36                  lks Цитата(zltigo @ Apr 29 2007, 20:36) Блеск... Apr 29 2007, 19:46                   zltigo Цитата(lks @ Apr 29 2007, 19:46) Да нет, ... Apr 29 2007, 20:01                 Сергей Борщ Цитата(lks @ Apr 29 2007, 19:24) В чем пр... Apr 29 2007, 21:03                  lks Цитата(Сергей Борщ @ Apr 29 2007, 22:03) ... Apr 29 2007, 21:31                   zltigo Цитата(lks @ Apr 29 2007, 21:31) книжку п... Apr 29 2007, 21:41                    lks Цитата(zltigo @ Apr 29 2007, 22:41) За яз... Apr 29 2007, 21:50                     zltigo Цитата(lks @ Apr 29 2007, 21:50) А что вы... Apr 29 2007, 22:04                      Legotron Уважаемые собеседники!
Не составит ли вам бол... Apr 29 2007, 22:36                       zltigo Цитата(Legotron @ Apr 29 2007, 22:36) еще... Apr 29 2007, 22:56            Legotron Цитата(Legotron @ Apr 28 2007, 23:58) У м... Apr 29 2007, 15:44             zltigo Цитата(Legotron @ Apr 29 2007, 15:44) Ptr... Apr 29 2007, 15:54              Legotron Цитата(zltigo @ Apr 29 2007, 16:51) ... Apr 29 2007, 15:56               zltigo Цитата(Legotron @ Apr 29 2007, 15:56) why... Apr 29 2007, 16:06                Legotron Цитата(zltigo @ Apr 29 2007, 17:06) Потом... Apr 29 2007, 16:23           rezident Цитата(lks @ Apr 29 2007, 01:26) Непонятн... Apr 29 2007, 00:35         rezident Цитата(lks @ Apr 28 2007, 18:22) Ну тогда... Apr 28 2007, 17:48 o-henry Уважаемый tolik_zp!
На Ваш вопрос Вы уже полу... Apr 28 2007, 15:40 lks Цитата(o-henry @ Apr 28 2007, 16:40)... Apr 28 2007, 15:47  zltigo Цитата(lks @ Apr 28 2007, 15:47) А я не н... Apr 28 2007, 15:57   lks Цитата(zltigo @ Apr 28 2007, 16:57) Тем х... Apr 28 2007, 16:58    zltigo Цитата(lks @ Apr 28 2007, 16:58) По сущес... Apr 28 2007, 17:10 Vladimir Chekin Дежа-вю...
Юзер: - Я решил сварить яйцо в микровол... Apr 28 2007, 19:00 rezident Цитата(Vladimir Chekin)Написать или заказать напис... Apr 28 2007, 19:04 rezident Цитата(lks)Когда вы извлекаете адрес переменной с ... Apr 29 2007, 15:21 lks Цитата(rezident @ Apr 29 2007, 16:21) Ну ... Apr 29 2007, 16:43  rezident Цитата(lks @ Apr 29 2007, 19:34) Если я н... Apr 29 2007, 16:49  zltigo Цитата(lks @ Apr 29 2007, 16:34) Если я н... Apr 29 2007, 17:10   lks Цитата(zltigo @ Apr 29 2007, 18:10) Для т... Apr 29 2007, 17:25    zltigo Цитата(lks @ Apr 29 2007, 17:25) Список -... Apr 29 2007, 17:47 forever failure Неужели Дохтур Туамосес ? Apr 29 2007, 19:35 Vladimir Chekin rezident >> У вас есть адрес Доктора ТуамОс... Apr 30 2007, 03:24 Vladimir Chekin Может и не в кассу, имхо вот в этой короткой фразе... Apr 30 2007, 04:28 zltigo Цитата(Vladimir Chekin @ Apr 30 2007, 04... Apr 30 2007, 13:30  Dog Pawlowa Цитата(zltigo @ Apr 30 2007, 13:30) Описа... Apr 30 2007, 17:16   zltigo Цитата(Dog Pawlowa @ Apr 30 2007, 17:16) ... Apr 30 2007, 17:28
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|