Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 092
от 04.10.2002, 21:50

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
Украина, Днепропетровск
О рассылке:
Задано вопросов: 274
Отправлено ответов: 613
Активность: 223.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Yuri Gordienko
Статус: Доверительный
Общий рейтинг: 127.86
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 116.48
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
E$h@
Статус: Доверительный
Общий рейтинг: 130.37
[Подробней >>]
 
VicSimon
Статус: Начальный
Общий рейтинг: 102.99
[Подробней >>]
DiGiT[old]
Статус: Доверительный
Общий рейтинг: 112.21
[Подробней >>]
Pablo
Статус: Профессиональный
Общий рейтинг: 132.07
URL: Моя страничка
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 262. Здравствуйте эксперты! Спасибо всем кто помог мне разобраться с вопросом 261. Далеко бегать не буду ... (ответов: 6)

Вопросов: 1, ответов: 6


 Вопрос № 262

Здравствуйте эксперты!
Спасибо всем кто помог мне разобраться с вопросом 261.
Далеко бегать не буду и возьму тот же пример (модиф.):
------------------------------------
#include "iostream"
#include "cstring"
#include "cstdlib"
using namespace std;
class str {
char *p;
public:
str(char *s) {
p = new char [strlen(s) + 1];
if (!p) { exit(EXIT_FAILURE); }
strcpy(p, s);
}
~str() { delete []p; }
char *get() { return p; }
};
int main()
{
str a("test");

cout << a.get();
return 0;
}
------------------------------------
Когда символьная константа "test" передается конструктору
str(char *s), s получает в качестве значения символьную
константу "test". Не совсем понятно ГДЕ будет храниться
эта самая символьная константа на которую будет указывать
указатель типа char- s?
------------------------------------
Удачи...!



Вопрос отправлен: 01.10.2002, 18:41
Отправитель: kuper

[Следующий вопрос >>] [Список вопросов]

Отвечает Yuri Gordienko

Добрый день, kuper!
Ну, в твоем примере на символьную константу ничего указывать не будет, т.к. ты выделяешь память и копируешь содержимое входящего массива символов в выделенную память,
а память выделяется из кучи.


Ответ отправлен: 01.10.2002, 21:26
Отправитель: Yuri Gordienko


Отвечает baldr

Здравствуйте, kuper!
Там же где и обычные локальные переменные - в стеке.

Ответ отправлен: 02.10.2002, 14:43
Отправитель: baldr


Отвечает E$h@

Добрый день, kuper!
Вообще по идее в памяти будет храниться... А я вроде бы так не делал... Если аргумент - указатель на строку, то зачем ему пихать константу? А если честно то я вопрос до конца не понял...

Ответ отправлен: 02.10.2002, 14:53
Отправитель: E$h@


Отвечает VicSimon

Приветствую Вас, kuper!
Если я правильно понял вопрос, Вас интересует где хранится передаваемая в конструктор константа "test"?
Компилятор сохраняет все промежуточные константы в сегменте данных.

Ответ отправлен: 02.10.2002, 06:13
Отправитель: VicSimon


Отвечает DiGiT[old]

Доброе время суток, kuper!
Где то в сегменте дата или другом, а может и в стеке. А потом просто передаваться по указателю. Потому что длина указателя в основных компилерах 4 байта, поэтому будет адресоваться либо через ds или cs. За это в общем то отвечает компилятор, поэтому не волнуйся.

Ответ отправлен: 03.10.2002, 04:31
Отправитель: DiGiT[old]


Отвечает Pablo

Здравствуйте, kuper!
Компилятор помещает константу либо в инструкуию, которая при выполнении затем помещает ее в стек, и при выполнении передает функции указатель на находащуюся в стеке константу, либо в сегмент данных и просто при выполнении передает фукнции указатель на эту строку в сегменте данных.

Ответ отправлен: 04.10.2002, 21:19
Отправитель: Pablo



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (39)
C / C++ (30)
Perl (6)
Delphi (17)
Pascal (22)
Basic / VBA (11)
Java / JavaScript (10)
PHP (9)
MySQL / MSSQL (11)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (28)
"Железо" (34)
Поиск информации (13)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (17)
Юристу
Гражданское право (8)
Семейное право (3)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное