Здравствуйте эксперты! Спасибо всем кто помог мне разобраться с вопросом 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? ------------------------------------ Удачи...!
Добрый день, 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.