Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: c# структуры и указатели  (Прочитано 63126 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
гайка
Гость
« : 07-07-2011 19:13 » 

Эту тему уже затронули Dale и resource в теме "C#, структура и буфер с данными", но не продолжили, ибо правилами сайта возбраняется болтовня не по теме.
Мне нужно на шарпе организовать бинарное дерево, то есть структуру с тремя полями:
Код: (C++)
struct Client
{
        string number;
        struct Client* left;
        struct Client* right;
}
объясните, пожалуйста, как правильно использовать unsafe и fixed или, возможно, есть другие методы решения этой проблемы?
« Последнее редактирование: 08-07-2011 07:25 от Джон » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 07-07-2011 19:27 » 

Насколько я помню, на шарпе это не тривиальная задача. Когда то я просто воспользовался контейнером List и не заморачивался.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #2 : 07-07-2011 19:30 » 

не знакома с ним. один момент, сейчас прогуглю
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 07-07-2011 19:34 » 

В STL С++, List организуется как двухсвязанный список. Думаю что в шарпе примерно такое же решение. Хотя могу и ошибаться.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 07-07-2011 19:36 » new

Прежде всего - о каком языке программирования идет речь?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 07-07-2011 19:37 » 

Dale, Вроде как в теме обозначен Шарп Улыбаюсь Правда структура чистое С/С++
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #6 : 07-07-2011 19:41 » 

Dale, я писала такую задачу на с++, теперь ее нужно перегнать под c#

Добавлено через 48 секунд:
Finch, поняла. я что-то не нахожу этого в с#, ну как бы там не было, первостепенная задача - разобраться с unsafe и fixed
« Последнее редактирование: 07-07-2011 19:42 от гайка » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 07-07-2011 19:43 » 

Гайка, Не заморачивайся на двухсвязанном списке. Используй контейнер. (Не изобретай велосипед).
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #8 : 07-07-2011 19:47 » 

есть у меня такая привычка - изобретать вещи, которые впоследствии никому кроме меня (да и мне вряд ли) не пригодятся=)
к тому же использование контейнера для меня будет "открытием америки"...
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 07-07-2011 19:51 » 

первостепенная задача - разобраться с unsafe и fixed

Это самая простая задача - просто выбросьте их обоих куда подальше. Они не имеют ни малейшего отношения к сути данной задачи.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #10 : 07-07-2011 19:59 » 

Dale, но ведь c# не дружит с указателями на указатели, ругается и кричит что он такого не умеет=)
вот примерно так кричит:"Указатели и буферы фиксированного размера можно использовать только в небезопасном контексте"
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 07-07-2011 20:00 » 

А теперь вернемся к сути задачи.

Прежде всего, в языке C#, в отличие от C++, структуры и классы - не одно и то же. Структура в C# имеет семантику значения, она не может иметь наследников и на нее нельзя получить ссылку (теоретически можно, конечно, за счет неявного создания класса-оболочки, но это особый случай).

Класс имеет ссылочную семантику. Экземпляры класса создаются исключительно в "куче" и доступны только через ссылку.

(Заодно приучаемся к мысли, что в чистом C# указателей нет и быть не может, есть только ссылки. На самом деле указатели оставлены как лазейка для работы с "нативным" кодом, но это сейчас тоже не обсуждается, ибо не тот случай).

Добавлено через 4 минуты и 49 секунд:
Dale, но ведь c# не дружит с указателями на указатели, ругается и кричит что он такого не умеет=)

Конечно, не дружит (см. предыдущий пост). Ну и не надо его насиловать, чтобы дружил, насильно мил не будешь.

Если взялись за Шарп, отбрасывайте плюсплюсовые повадки в сторону, они будут только сбивать с толку. Это совершенно другой язык, и говорят на нем совсем по-другому.
« Последнее редактирование: 07-07-2011 20:05 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #12 : 07-07-2011 20:09 » 

ладно, приучаемся, уже почти приучились.
моя наивность меня погубит.
то есть мне про структуру тоже можно забыть?
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 07-07-2011 20:13 » 

Dale, но ведь c# не дружит с указателями на указатели, ругается и кричит что он такого не умеет=)
вот примерно так кричит:"Указатели и буферы фиксированного размера можно использовать только в небезопасном контексте"
Гайка, а здесь нет буфера фиксированного размера. Есть только структура, а она не unsafe - это просто value type. По сути, это такая оптимизация над классами (может размещаться на стеке, копируется по значению).
Поэтому, если не нужно взаимодействовать с unmanaged-кодом или оптимизировать по скорости создание-удаление огромного числа таких структур, то проще сделать class с публичными полями для тех же целей, имхо. Мороки меньше, всё по ссылкам.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 07-07-2011 20:14 » 

Итак, для начала забываем C++.

Забыли? Тогда пишем:

Код: (C#)
class Client
{
    public string number;
    public Client left;
    public Client right;
}

Конечно, с точки зрения хорошего стиля это форменное безобразие - открытые члены класса, причем не проинициализированные явно. Но для начала сойдет, хотя бы скомпилируется. Потом улучшим по ходу.
« Последнее редактирование: 08-07-2011 07:19 от Джон » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #15 : 07-07-2011 20:18 » 

так точно, Dale! написали, скомпиллировали
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 07-07-2011 20:21 » 

то есть мне про структуру тоже можно забыть?

Эх, девушки, все вам лишь бы поскорее забыть...

Ну в данном конкретном случае - да, можно немного подзабыть, поскольку для динамических структур структура (прошу прощения за тавтологию) - малопригодный материал. Но вообще структуры бывают весьма полезны, поэтому совсем уж забывать их ни к чему. Скорее отложим их пока про запас.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #17 : 07-07-2011 20:21 » 

а новичкам аватарки не полагаются, да? жаль=(

Добавлено через 3 минуты и 18 секунд:
Цитата
Эх, девушки, все вам лишь бы поскорее забыть...
я попрошу...
Цитата
2.2 Обсуждение недостатков и какие-либо обвинения противоположного пола.

Добавлено через 1 минуту и 19 секунд:
ах да, в цитатах надо источник указывать... ну да ладно, вроде бы и так понятно
« Последнее редактирование: 07-07-2011 20:26 от гайка » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 07-07-2011 20:28 » 

Это не недостаток, а скорее свойство. Типа "не бага, а фича". И не обвинение, а констатация факта.

Ну а теперь построимпосадим маленькое такое деревце. Бонсай, с корнем и двумя листиками.

Код: (C#)
Client root = new Client();
root.number = "Root";

root.left = new Client();
root.left.number = "Left Leaf";

root.right = new Client();
root.right.number = "Right Leaf";

Добавлено через 47 секунд:
ах да, в цитатах надо источник указывать...

Ничего, я не столь тщеславен.
« Последнее редактирование: 08-07-2011 07:19 от Джон » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #19 : 07-07-2011 20:33 » 

Цитата
Ну а теперь построимпосадим маленькое такое деревце
это внутри свеженького класса client?

Добавлено через 30 секунд:
тьфу ты... цитаты...
« Последнее редактирование: 07-07-2011 20:34 от гайка » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 07-07-2011 20:36 » 

это внутри свеженького класса client?

Нет, это уже в основном коде. Например, прямо в Main(). Класс закрыли, первая версия вчерне готова.

Добавлено через 4 минуты и 44 секунды:
Потом, спасатели, аватара подождет. Что там с нашим многострадальным кодом, стало лучше?
« Последнее редактирование: 07-07-2011 20:41 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #21 : 07-07-2011 20:43 » 

Dale, готово, теперь как я могу использовать этот класс  в других классах? его нужно передавать в параметрах?
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 07-07-2011 20:44 » 

Для начала - что значит "использовать", каким образом?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #23 : 07-07-2011 20:45 » 

Да, пожалуй аватар - это не самая насущная проблема)

Добавлено через 3 минуты и 11 секунд:
Dale, есть формочка создания нового клиента, допустим там только текстбокс, куда вводится номер паспорта и кнопка сохранить. в каком виде это будет храниться, я теперь сказать не могу, так как произошло крушение моего маленького мира.
« Последнее редактирование: 07-07-2011 20:48 от гайка » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 07-07-2011 20:52 » 

Непонятно, зачем из живых людей деревья делать, тем более бинарные. Нет, я понимаю, деревья - наши зеленые друзья, но в чем смысл сей операции?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
гайка
Гость
« Ответ #25 : 07-07-2011 20:54 » 

я вообще-то потом еще собиралась в текстовый файл инфу запихать, но с этим я и сама разберусь, эт ерунда.
Это курсовой проэкт, была бы моя воля, я бы ясен *** навояла бы бд на серваке по-быстренькому и никаких деревьев и хеш-таблиц, но тут не поспоришь...
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 07-07-2011 20:57 » 

Если "использовать" - это создать экземпляр клиента, то примерно в таком духе:

Код: (C#)
// создаем новый экземпляр класса в "куче"
Client cln = new Client();
// вставляем клиента в нужную ветвь нашего дерева
« Последнее редактирование: 08-07-2011 07:21 от Джон » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #27 : 07-07-2011 20:57 » 

Гайка, С базами не все так просто Улыбаюсь Нужно будет изучать целый раздел под названием ADO.NET
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #28 : 07-07-2011 21:02 » 

Finch, просто с базами мы уже имели дело и задача для нынешнего курсовика, если применять базы, совсем не сложная. по крайней мере есть, где хранить данные. а тут нужно извращаться. ведь все экземпляры класса при новом запуске программы благополучно удаляться. тут в голову начинают лезть мысли о текстовых файлах и всяких уловках, не сказанных в задании. раз не запретили - значит можно.

Добавлено через 3 минуты и 1 секунду:
Dale, вот так просто? бах и всё?
Жаль могла бы и сама додуматься... эх, на что девушкам голова? Улыбаюсь
« Последнее редактирование: 07-07-2011 21:05 от гайка » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #29 : 07-07-2011 21:07 » 

Для базы нужно еще и клиентское приложение, поскольку пользователи обычно напрямую с базами не работают. Тут-то и начнется самое веселое...


Нет, если уж преподаватель не потребовал задействовать базу, нужно только перекреститься с облегчением - 9/10 проблем прошли стороной.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines