Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для Alex1234
13 / 13 / 2
Регистрация: 11.02.2011
Сообщений: 55

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

11.02.2011, 12:08. Показов 2526. Ответов 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 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru