Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

Указатели - C++

17.08.2013, 10:50. Просмотров 567. Ответов 14
Метки нет (Все метки)

Кто нибудь может помочь с объяснением указателей?

1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct pizza
{
    string name;
    int diameter; 
    int weight;
};
 
int main ()
{
    rus;
    pizza* company1 = new pizza;
    cout << "Введите название компании: ";
    getline(cin,company1->name);
Почему вместо точки нужно ставить стрелочку, и почему этого не было в книжке?

2) Как работает инициализация указателя? int *a = new int;
В общем, что означает int *a, и что означает new int? По сути это создание обычной переменной, хранилищем для которой можно управлять?

3) Вот представим такую ситуацию:
C++
1
2
3
4
    int *a = new int;  // мы резервируем место для переменной типа int 
    int b = 550; // инициализируем переменную b;
    *a = b; // присваиваем значение b значению, которое хранится по адресу &a 
    cout << a << " " < < *a << " " << &a << endl;
Компилируем, и выходят такие строки:

002B6138 550 0026FE80.

Со значениями 0026FE80 (адрес переменной а) и 550 (значение, хранящееся в этом адресе) вроде бы все понятно. А вот что означает первое значение?

Заранее спасибо. С меня плюсы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2013, 10:50     Указатели
Посмотрите здесь:

Указатели - C++
Всем привет. Нам дали сделать лабу: Дана целочисленная прямоугольная матрица. 1) Определить номер первого из столбцов, содержащих хотя...

Указатели - C++
Доброй ночи! Вот столкнулась с такой проблемой, нужно из одной функции в другую перенести переменную number через указатель, что у меня...

Указатели - C++
1) Предположим, что p - указатель, установленный на целую переменную со значением 3. Что можно сказать о значении выражений p, * p, &amp; p, *...

Указатели - C++
Почему такой вариант кода невозможен(конкретно: строка 6)?int indicator, x = 15, y = 10; int *ptr; cin &gt;&gt; indicator; ...

Указатели - C++
Доброго времени суток. У меня задание. Кто поможет? Сказали разобраться с указателями. Программа ругается на +=, выдает ошибку. Как их...

указатели - C++
1) создать функцию(проблем нет) 2) в функции ввести и определить локальную переменную типа int и задать ей значение 1(проблем нет) 3) в...

Указатели в c++ - C++
Задача: Дан текст, заканчивающийся точкой. Напечатать этот текст, удалив из него все цифры и знаки «+» или «–». Попробовала написать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
17.08.2013, 10:55     Указатели #2
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Почему вместо точки нужно ставить стрелочку, и почему этого не было в книжке?
Потому что для указателей селектор членов класса это '->', а не '.'.
Можете написать так:
C++
1
*(company1).name
Добавлено через 3 минуты
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
В общем, что означает int *a, и что означает new int
int * - тип указатель на объект типа int
new int - читаем главу о динамической памяти (куче)
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
17.08.2013, 10:55  [ТС]     Указатели #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что для указателей селектор членов класса это '->', а не '.'.
Можете написать так:
C++
1
*(company1).name
А как это объяснить попроще?
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
17.08.2013, 10:56     Указатели #4
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
cout << a << " " < < *a << " " << &a << endl;
a = выделенный адрес
*а = значение хранящееся по адресу
&a = адрес самого указателя
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
17.08.2013, 10:57     Указатели #5
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
. А вот что означает первое значение?
Адрес, содержащийся в указателе. В данном случае адрес выделенной оператором new памяти в куче

Добавлено через 48 секунд
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
А как это объяснить попроще?
Для обращения к членам класса через указатель используйте "оператор стрелочка" убить меня за такое название
C++
1
obj->method ( ) ;
или нужно разыменовывать указатель и обращайтесь с помощью "оператора точки"
C++
1
*(obj).method ( ) ;
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
17.08.2013, 10:57     Указатели #6
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
А как это объяснить попроще?
Просто необходимо запомнить, что переменная . а указатель ->, как девочка и мальчик =)
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
17.08.2013, 10:59  [ТС]     Указатели #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Адрес, содержащийся в указателе. В данном случае адрес выделенной оператором new памяти в куче
Короче, a = адрес, который система выделила для переменной;
*а = это значение из этого адреса?
а вот &а = это адрес указателя? т.е *а = это и есть указатель? тогда получается &a и а должны быть равны. А они не равны!

Цитата Сообщение от Croessmah Посмотреть сообщение
В данном случае адрес выделенной оператором new памяти в куче
или нужно разыменовывать указатель и обращайтесь с помощью "оператора точки"
C++
1
*(obj).method ( ) ;
Разыменование это присваивание значения указателя в адресе, на который указывает указатель?
zenw
17.08.2013, 11:06
  #8

Не по теме:

Для обращения к членам класса через указатель используйте "оператор стрелочка" убить меня за такое название
Почему убить? Вроде бы на английском он именно "operator arrow" и называется, и по-русски так же. Или я ошибаюсь?

Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
17.08.2013, 11:09     Указатели #9
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
тогда получается &a и а должны быть равны. А они не равны!
*a - берем то, что храниться по содержащемуся адресу
a - адрес, который содержит указатель
&a - адрес самого указателя, ведь указатель - это такая же переменная, которая где-то храниться
Указатели
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
17.08.2013, 11:12     Указатели #10
опять же самое понятное объяснение указателей в этих лекциях Для того чтобы выучить С++ по книге Бьёрна Страуструпа
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6443 / 3082 / 306
Регистрация: 04.12.2011
Сообщений: 8,488
Записей в блоге: 4
17.08.2013, 11:24     Указатели #11
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
а вот &а = это адрес указателя? т.е *а = это и есть указатель? тогда получается &a и а должны быть равны. А они не равны!
Нет. Логика в том, что если &a это адрес указателя то *(&a) это значение по адресу &a, то есть значения указателя которое хранится в переменной а, поскольку a объявлена как указатель. А уже *a это значение по адресу хранимому в a (или как говорят указателю). В данном случае это целое число, так как a объявлена как указатель на целое.
Вас путает, тот факт, что и &a и a это адреса. Соберитесь.
vladand
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
19.08.2013, 05:03     Указатели #12
Подскажите, пожалуйста, литературу или отдельные главы из учебников, где просто и понятно разжевываются указатели. Читаю Шилдта, вроде объясняет просто, но понятного мало. Немного разобрался с определениями, а вот выражения с участием указателей ставят в тупик :\
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.08.2013, 08:32     Указатели #13
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Как работает инициализация указателя? int *a = new int;
Тут просто указателю a на int присваивается ячейка памяти int выделенная new . Это тоже самое, что есть переменная int b; и мы присваиваем int* a=&b; указателю а адрес переменной b. Тут видно что new int; возвращает адрес новой ячейки памяти который сохраняется в указателе a.

Я сам тоже не сразу понял что в указателя есть свой адрес, тоже раньше думал что &a и а должны быть равны. Потом уже поэкспериментировав и построив двоичное дерево разобрался что да как.
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
19.08.2013, 09:06     Указатели #14
Цитата Сообщение от vladand Посмотреть сообщение
Подскажите, пожалуйста, литературу или отдельные главы из учебников, где просто и понятно разжевываются указатели. Читаю Шилдта, вроде объясняет просто, но понятного мало. Немного разобрался с определениями, а вот выражения с участием указателей ставят в тупик :\
я поэтому и дал ссылку на видеолекции, если внимательно почитаешь эту ветку. без картинок(или доски) не объяснить по нормальному
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 14:16     Указатели
Еще ссылки по теме:

Указатели - C++
Что происходит в данном случае? for (unsigned int i = 0; i &lt; n; i++) p_array.entry_pt = NULL; for (unsigned int...

Указатели - C++
Написать программу на языке C Задание: введите с клавиатуры 3 числа и выведите их на экран в порядке возрастания. Программу написать с...

Указатели - C++
С одномерным массивом, состоящим из n вещественных элементов, вы-полнить следующее: Преобразовать массив таким образом, чтобы сначала...

Указатели - C++
Что это означает? while(*p), if(*p) это типа проверка есть ли у указателя значение? или что-то другое?

Указатели в Си - C++
Добрый вечер! Почему MinGW ругается при объявлении: char *str = {&quot;Hello&quot;, &quot; World!&quot;}; Объясните пожалуйста, как со строковыми...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
19.08.2013, 14:16     Указатели #15
Цитата Сообщение от vladand Посмотреть сообщение
где просто и понятно разжевываются указатели.
Стефан Девис "C++ для чайников" 2003 год ( есть более новые издания, но с ними не знакомился, так что без понятия как там)
Yandex
Объявления
19.08.2013, 14:16     Указатели
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru