Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели, строки, классы и пр. Си++ новичкам посвящается... 
V
    Опции темы
Daevaorn
Дата 12.11.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(Frekenbok @  12.11.2006,  09:51 Найти цитируемый пост)
Насколько я понимаю, указатель должен указывать на уже существующий объект (переменную и т.п.) или на NULL.

Указаетль указывает на область памяти. Куда именно ему всё равно. Просто если там не будет объекта - будут проблемы
Цитата(Frekenbok @  12.11.2006,  09:51 Найти цитируемый пост)
Я получаю доступ к полям и методам кнопки через указатель?

Да
Цитата(Frekenbok @  12.11.2006,  09:51 Найти цитируемый пост)
А "где" сам объект? 

Находится по адресу накоторой указывает указатель
Цитата(Frekenbok @  12.11.2006,  09:51 Найти цитируемый пост)
Компилятор создает объект и указатель на него

Создает поле в классе формы с типом "указатель на объект кнопка"
Цитата(Frekenbok @  12.11.2006,  09:51 Найти цитируемый пост)
а я работаю только с указателем? 

Да
PM MAIL WWW   Вверх
ManiaK
Дата 14.11.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Цитата(Frekenbok @  12.11.2006,  08:51 Найти цитируемый пост)
Компилятор создает объект и указатель на него, а я работаю только с указателем?


Нифига подобного. В Си/Си++ компилятор вообще ничего сам не делает. ТЫ создаёшь указатель, ТЫ, если хочешь, создаёшь объект, ТЫ выбираешь с кем тебе работать - с указателем или с объектом. И, наконец, ТЫ выбираешь когда твой объект должен будет удалён из памяти. Ни один из этих пунктов не будет за тебя выполнен компилятором, если ты не создашь объект сам, а попытаешься обратиться к нему по указателю, то результат может быть самым неожиданным (в зависимости от того, что находится в данный момент времени в качестве значения указателя).
PM MAIL WWW   Вверх
archimed7592
Дата 14.11.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



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


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Frekenbok
Дата 15.11.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.10.2006

Репутация: нет
Всего: 1



Цитата(ManiaK @  14.11.2006,  15:00 Найти цитируемый пост)
ТЫ создаёшь указатель, ТЫ, если хочешь, создаёшь объект,

ManiaK,  ты имеешь ввиду, если Я кидаю компонент на форму (Builder), то Я и создаю объект и указатель? 


PM MAIL   Вверх
archimed7592
Дата 15.11.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



угу. в codebehind сможешь найти что-то вроде Label1 = new Label1 (...); хотя, я совсем не исключаю, что у билдера со своими замутами и __published не будет такой строки, но по сути объект именно создается...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Frekenbok
Дата 16.11.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.10.2006

Репутация: нет
Всего: 1



как передать в функцию указатель на строку в качестве параметра-переменной (чтобы в функции он передвинулся и в main это было видно, но не глобальный указатель)? сама функция возвращает число (позиция указателя). 
PM MAIL   Вверх
archimed7592
Дата 16.11.2006, 12:58 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Код

int func (char *&ptr)
{
ptr += strlen (ptr) > 5 ? 5 : strlen (ptr);
}

main ()
{
char *p = "abcdefgh", p2 = "abc";
func (p); func (p2);
printf ("%s\n%s\n", p, p2);
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ManiaK
Дата 17.11.2006, 09:49 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



C языке Си придётся пользоваться указателем на указатель.

Добавлено @ 09:56 
Цитата(Frekenbok @  15.11.2006,  13:14 Найти цитируемый пост)
ManiaK,  ты имеешь ввиду, если Я кидаю компонент на форму (Builder), то Я и создаю объект и указатель? 

Я вообще про формы ничего не говорил. Если ты кидаешь компонент на форму - то, что там произойдёт зависит от компилятора, на уровне языка у тебя ещё ничего не будет. Я имел ввиду вот что:

Код

int* pi;// ТЫ создаёшь указатель
pi = new int;// ТЫ создаёшь объект
delete pi;// ТЫ удаляешь объект


Компилятор за тебя ни то, ни другое, ни третье делать не будет.

Код

int* pi;// создали указатель
*pi = 10;// Фигу! объекта-то ещё нет!


Вот что я, собственно, хотел сказать. Если есть какие-то непонимания в понятиях объект/указатель в Си/Си++ - то это уже вопрос к первой статье, по которой, покуда все молчат, я посчитал, всё понятно.

Цитата(archimed7592 @  14.11.2006,  23:52 Найти цитируемый пост)
ты забыл сказать, что это касается динамических объектов.

Да, конечно. Для статических нам нужно только изъявить желание и мы тут же получим объект и нам не нужно будет следить за тем, чтобы память им занимаемая где-нибудь не "улетела". Но это всё вроде было уже описано в первой статье. Если что-то непонятно - я поправлю. Тока скажите.
PM MAIL WWW   Вверх
Frekenbok
Дата 18.11.2006, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.10.2006

Репутация: нет
Всего: 1



Цитата(archimed7592 @  16.11.2006,  12:58 Найти цитируемый пост)
int func (char *&ptr)

archimed7592, спасибо, функция у меня есть. Интересовала именно передача параметра char *&ptr. Как-то еще не приходилось этим сочетанием пользоваться smile
PM MAIL   Вверх
archimed7592
Дата 18.11.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Frekenbok @  18.11.2006,  06:07 Найти цитируемый пост)
 Интересовала именно передача параметра char *&ptr
вот тебе и передача...оттуда же
Цитата(archimed7592 @  16.11.2006,  13:58 Найти цитируемый пост)
char *p = "abcdefgh";
func (p);




--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
drLans
Дата 2.12.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Люди поясните, плз, в чем отличие динамического выделения памяти от обычного задания того же массива в тексте программы?
PM MAIL   Вверх
Partizan
Дата 2.12.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 67



Цитата(drLans @ 2.12.2006,  15:56)
Люди поясните, плз, в чем отличие динамического выделения памяти от обычного задания того же массива в тексте программы?

разные области памяти задействуются...
при объявлении массив в тексте программы в compile-time память под него выделяется в стэке...
динамическая память выделяется из кучи...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
nickless
Дата 2.12.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 2
Всего: 181



Цитата(drLans @ 2.12.2006,  14:56)
Люди поясните, плз, в чем отличие динамического выделения памяти от обычного задания того же массива в тексте программы?

А еще динамически выделенную память нужно не забывать освобождать 

Это сообщение отредактировал(а) nickless - 2.12.2006, 17:36


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
drLans
Дата 2.12.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Partizan
так стек по идее быстрее.  smile 


Daevaorn
не могу пока.  smile 
Ибо не вдавался в особенности (и главное смысл) использования new/delete.

Я не понимаю, что может быть лучше этого:
Код

int massiv[] = {1,2,3};

PM MAIL   Вверх
Daevaorn
Дата 2.12.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(drLans @  2.12.2006,  18:54 Найти цитируемый пост)
так стек по идее быстрее.  

Гораздо.
Цитата(drLans @  2.12.2006,  18:54 Найти цитируемый пост)
Я не понимаю, что может быть лучше этого:

А когда не знаешь зарание количество элементов? Тут то и пригождается динамическое выделение.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2049 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.