Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 1
Регистрация: 14.09.2012
Сообщений: 83

Ах, эти указатели

30.03.2013, 23:11. Показов 3416. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал изучать С++
и тут наткнулся на недопонимание.

Операция new резервирует место в куче, необходимое для хранения значения этого типа.
т.е. правильно делать так.
C++
1
2
3
4
5
float* pf;
pf  = new float(0);
//дальше что-то делаем с переменной.
*pf = 3.14;  
cout << *pf << endl;
Тогда я не понимаю, как без new получается выполнение этого
C++
1
2
3
float* pf;
*pf = 3.14;
cout << *pf << endl;
Объясните пожалуйста, как без выделения места в куче я могу оперировать указателем, записывая в него?????
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2013, 23:11
Ответы с готовыми решениями:

Зачем нужны все эти указатели (или не указатели)
Зачем надо DWORD, HANDLE, LPVOID?

Ох уж эти указатели
Есть С++ библиотека int CCDTitanFUnctions::GetFrame(float exduration) { if (hCam == NULL) return 1; // Don't switch...

Выполнить обмен значениями двух переменных используя указатели на эти переменные
Выполнить обмен значениями двух переменных используя указатели на эти переменные.

47
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
31.03.2013, 01:39
Студворк — интернет-сервис помощи студентам
попробуйте такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
int main(){
    int *p;
    int x;
    std::cout<<"Enter x->";
    std::cin>>x;
    if(x>0)
        *p=123;
    else
        *p=45;
    std::cout << *p;
}
Тут неизвестно конечное значение вывода, поэтому компилятор вряд ли его вырежет
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2013, 01:45
Цитата Сообщение от Croessmah Посмотреть сообщение
попробовал на MinGW с ключом -O1
программа упала при запуске.
Верю. Скрин в 35 посте. Но это не важно. Что-то выводит, что-то не выводит, суть от этого не меняется.

Добавлено через 4 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Тут неизвестно конечное значение вывода, поэтому компилятор вряд ли его вырежет
Ошибка.
0
31.03.2013, 01:48

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Ошибка.
С ключом -O3 не падает, вот гадость:D

0
2 / 2 / 1
Регистрация: 14.09.2012
Сообщений: 83
31.03.2013, 02:03  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Мусор не 123, а адрес, который в указателе.
тогда как он вывел 123? почему оно сохранилось в переменной память под которую мы не выделили?(мы же не использовали new)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
31.03.2013, 02:05
Цитата Сообщение от Pinokio Посмотреть сообщение
тогда как он вывел 123?
Вам же объясняют, что компилятор просто вырезал Ваш указатель при оптимизации. Ведь он не нужен никому.

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Ошибка.
Однако, с
C++
1
volatile int *p;
и с O3 падает, во всяком случае у меня:D

0
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
31.03.2013, 02:12
Совет: если несобираешся использовать указатель то обнуляй его p = 0;
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
31.03.2013, 03:04
Цитата Сообщение от Pinokio Посмотреть сообщение
Да, весь Керниган и Ричи испичкан вторым вариантом, а new применяется только для массивов. как мы вообще можем записать в *pf, если мы память в куче не резервировали????
А где именно? Чё-то сомневаюсь я в этом...

Добавлено через 12 минут
Я имею ввиду K&R
0
2 / 2 / 1
Регистрация: 14.09.2012
Сообщений: 83
31.03.2013, 03:17  [ТС]
Цитата Сообщение от kravam Посмотреть сообщение
А где именно? Чё-то сомневаюсь я в этом...

Добавлено через 12 минут
Я имею ввиду K&R
K&R, конечно, нету new, только первая часть относилась к книге. 114, 120 стр и дальше встречается. 2е издание. но там нет присвоений голых чисел. на тот момент я не знал, что присвоение указателю переменной тоже есть ее определение, я думал, что только при помощи new.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2013, 03:17
Помогаю со студенческими работами здесь

Опять эти указатели
Здравствуйте! Какие не понятные явления происходят после удаления объекта P (вылетает ошибка в библиотеку борланда). Как её можно...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

С клавиатуры вводятся количество чисел N и сами эти числа. Разработайте приложение, которое помещает эти элеме
Помогите пожалуйста! С клавиатуры вводятся количество чисел N и сами эти числа. Разработайте приложение, которое помещает эти...

С клавиатуры вводятся количество чисел N и сами эти числа. Разработайте приложение, которое помещает эти элементы в масс
Помогите пожалуйста написать код! С клавиатуры вводятся количество чисел N и сами эти числа. Разработайте приложение, которое помещает...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru