Аватар для Alex1234
13 / 13 / 2
Регистрация: 11.02.2011
Сообщений: 55

Глупый вопрос по указателям?

11.02.2011, 12:08. Показов 2535. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите как это работает? Правильно ли я понимаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct A
{
};
 
struct B: public A
{
    int var1;
    int var2;
};
 
int main(int argc, char *argv[])
{
    A* x = new A;            //Памяти выделяется на объект от A
    B* y = (B*)x;
    y->var2 = 5;              //Пишет не в свою память?
    ((B*)x)->var2 = 5;      //Это эквивалент?
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2011, 12:08
Ответы с готовыми решениями:

Вопрос по указателям
Ребят, простите за такую глупость, но вот не знаю как ответить на чётко поставленный преподавателем вопрос : "Как зная указатель на...

Вопрос по указателям
В учебнике Дейтелов нашел код: void convertToUppercase(char *); int main() { char string = "characters and...

Оч глупый вопрос
вот вместо цифры 1 как поставить переменную p->Bitmap->SaveToFile("C:\\bm\\rf\\1.bmp"); до этого баловался только с борландом.. поэтому...

25
 Аватар для Alex1234
13 / 13 / 2
Регистрация: 11.02.2011
Сообщений: 55
13.02.2011, 23:30  [ТС]
Студворк — интернет-сервис помощи студентам
Спасибо большое! У меня последний gcc, в разных вариантах программа не падает, но подозрения на некорректную работу с памятью тоже были. Надо бы в дизассемблированном виде на это посмотреть, но лень.
0
Заблокирован
14.02.2011, 00:07
Цитата Сообщение от Alex1234 Посмотреть сообщение
А почему память по переменную z типа (B *), выделяется в стеке? Я думал в куче.
Потому, что она там выделяется. И подозреваю, что так делается в подавляющем большинстве языков программирования. Покури что-нибудь на предмет "автоматические переменные" для прояснения.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
14.02.2011, 00:11
Лаподь, тут по-моему идут непоянтки... Напильнег придрался к словам ТСа о том, что, мол, указатель выделяется в куче, а ТС на самом деле имел ввиду, что память, на которую устанавливается указатель, выделяется в куче. Понятно, что сама переменная-указатель выделяется в стеке, но часто на подсознательном уровне программисты связывают переменную-указатель с памятью, на которую он указывает, хотя на самом деле это разные области памяти, одна - стек (сама переменная-указатель), другая - куча (та память, на которую этот указатель указывает).
0
Заблокирован
14.02.2011, 00:36
Цитата Сообщение от Alex1234 Посмотреть сообщение
C++
1
2
  char* str = "Hello world"; //т.е. const char* str; 
                             //но много где видел и такое.
С чего это ты взял? То, что указатель инициализируется указателем на константу вовсе не означает, что он сам становится указателем на константу.

Цитата Сообщение от Alex1234 Посмотреть сообщение
C++
1
2
  str[0] = 'M'; //Компилятор без разговоров проглатывает, 
  *(str+2) = 'r'; //но ничего не пишет в строку.
Что-то не так с настройкой исполняющей системы - должно порождаться исключение, т.к. константы должны лежать в защищенной для записи области памяти.

Компилятор проглатывает потому, что str у тебя не является указателем на константу и ничего незаконного на этапе компиляции тут не происходит.

Добавлено через 10 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
тут по-моему идут непоянтки... ТС на самом деле имел ввиду, что память, на которую устанавливается указатель, выделяется в куче. Понятно, что сама переменная-указатель выделяется в стеке, но часто на подсознательном уровне программисты связывают переменную-указатель с памятью, на которую он указывает, хотя на самом деле это разные области памяти,
Что ж, возможно так оно и есть - ТС имел в виду. Но я высказался абсолютно точно и грамотно, пусть читает до полного прояснения и учится стоить правильные ассоциации на "подсознательном уровне" - в программировании даже один символ может иметь драматическое значение, надо привыкать к строгости.
0
14.02.2011, 00:38

Не по теме:

Лаподь, мне об этом можете не напоминать.

0
 Аватар для Alex1234
13 / 13 / 2
Регистрация: 11.02.2011
Сообщений: 55
14.02.2011, 12:27  [ТС]
Цитата Сообщение от Alex1234 Посмотреть сообщение
Спасибо большое за ответ!!! А то я совсем запарился.
C++
1
2
3
4
int main(int argc, char *argv[])
{
    char* str = "Hello world";  //т.е. const char* str;
                                  //но много где видел и такое.
Тут я не совсем понятно скомментировал, просто считаю const надо указывать.

Добавлено через 11 минут
Чет C++ совсем убивает. У меня еще вопрос появился.
C++
1
2
    int *x;
    new (x)int;    //Что может значить это выражение? Компилятор хавает, программа падает.
Добавлено через 2 часа 2 минуты
Извиняюсь, разобрался.
void* operator new (std::size_t size) throw (std::bad_alloc);
void* operator new (std::size_t size, const std::nothrow_t& nothrow_constant) throw();
void* operator new (std::size_t size, void* ptr) throw();
C++
1
2
3
    
int *x;
x = new(std::nothrow) int;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2011, 12:27

простой и глупый вопрос
Да, вопрос немного глуповат, но в нете так ничего и не нашла. Либо просто вводила не то для поиска. Не знаю короче. Суть вопроса: У меня...

Глупый вопрос по шаблонам
Доброе время суток! Я достаточно опытный программист Java, но жизнь, как говорится, заставила переквалифицироваться на C++, причем,...

Извините за глупый вопрос.
Как в С++ записывается "и"? (Например в Pascal это "and"). И как записать это в условие типа: if (N<1000) "и" (N>100)...

Глупый вопрос про наследование
Вот фрагмент кода, реального: class CListviewParamPrimary : public CListviewParamFloats { private: /** * @brief Возвращает...

Глупый вопрос (возведение в квадрат)
Всем привет. Почему то не работает следующая элементарныя строчка кода. Значения y получаются отрицательными, например около -30000, хотя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru