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

Что значит * при объявлении переменной? - C++

Восстановить пароль Регистрация
 
Alex_From_777
Программист по неволе
 Аватар для Alex_From_777
22 / 22 / 4
Регистрация: 22.04.2015
Сообщений: 407
Записей в блоге: 1
12.10.2015, 11:11     Что значит * при объявлении переменной? #1
Пытаюсь разобраться в коде, предоставленном сторонними разработчиками в качестве примера.
Столкнулся вот с такой строкой:
C++
1
double *lpusBuffer;;
Да именно с такой. Да, там ; стоит два раза. Если кто знает с чем это может быть связано, то за ответ последует большая благодарность (мне то кажется, что это просто опечатка, но как знать).
Но главный вопрос: зачем нужен символ * при объявлении переменной?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
12.10.2015, 11:13     Что значит * при объявлении переменной? #2
Цитата Сообщение от Alex_From_777 Посмотреть сообщение
Но главный вопрос: зачем нужен символ * при объявлении переменной?
Указатель на переменную типа double.
Цитата Сообщение от Alex_From_777 Посмотреть сообщение
Да именно с такой. Да, там ; стоит два раза. Если кто знает с чем это может быть связано, то за ответ последует большая благодарность (мне то кажется, что это просто опечатка, но как знать).
Может и опечатка. Роли это не играет. Пустая инструкция будет проигнорированна.
Alex_From_777
Программист по неволе
 Аватар для Alex_From_777
22 / 22 / 4
Регистрация: 22.04.2015
Сообщений: 407
Записей в блоге: 1
12.10.2015, 11:19  [ТС]     Что значит * при объявлении переменной? #3
Цитата Сообщение от Ilot Посмотреть сообщение
Указатель на переменную типа double.
А в чем разница тогда с:
C++
1
double lpusBuffer;
Байт
 Аватар для Байт
13989 / 8820 / 1231
Регистрация: 24.12.2010
Сообщений: 15,987
12.10.2015, 11:26     Что значит * при объявлении переменной? #4
Цитата Сообщение от Alex_From_777 Посмотреть сообщение
в чем разница тогда с
double lpusBuffer - это просто число.
double *lpusBuffer - адрес памяти, где число хранится
C++
1
2
3
4
5
6
7
8
double pi = 3.14;
double e = 2.72;
double *p;
p = π
cout << *p;  // напечатает 3.14
p = &e;
cout << *p;  // напечатает 2.72
cout << p;  // Напечатает какое-то целое число, являющиеся адресом памяти.
Enno
265 / 168 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
12.10.2015, 11:27     Что значит * при объявлении переменной? #5
Цитата Сообщение от Alex_From_777 Посмотреть сообщение
А в чем разница тогда с:
Переменная.
Переменная это уже данные. Указатель это данные для адреса, самих данных по адресу может и не быть.
C++
1
2
3
4
double *lpusBuffer; // например 0x00003404
double Buffer; // например 16.3
*lpusBuffer; // разыменование, т.е. обращение к данным по адресу 0x00003404. С ними будут обращаться как с double, хотя может быть что угодно
&Buffer; // получение адреса. Например 0x00001004.
alexvikt
12 / 12 / 5
Регистрация: 29.09.2015
Сообщений: 38
12.10.2015, 11:31     Что значит * при объявлении переменной? #6
C++
1
double Buffer
При обращении к Buffer ты оперируешь значением переменной.
C++
1
double *lpusBuffer;;
При обращении к lpusBuffer ты оперируешь адресом переменной.
C++
1
lpusBuffer=&Buffer
Теперь lpusBuffer содержит адрес переменной Buffer.
Alex_From_777
Программист по неволе
 Аватар для Alex_From_777
22 / 22 / 4
Регистрация: 22.04.2015
Сообщений: 407
Записей в блоге: 1
12.10.2015, 13:40  [ТС]     Что значит * при объявлении переменной? #7
Цитата Сообщение от alexvikt Посмотреть сообщение
адресом переменной.
Цитата Сообщение от Байт Посмотреть сообщение
адрес памяти, где число хранится
Может тогда кто-нибудь пояснит, зачем узнавать адрес памяти, где число хранится?
Какое практическое значение это может иметь?
Байт
 Аватар для Байт
13989 / 8820 / 1231
Регистрация: 24.12.2010
Сообщений: 15,987
12.10.2015, 13:50     Что значит * при объявлении переменной? #8
Цитата Сообщение от Alex_From_777 Посмотреть сообщение
Может тогда кто-нибудь пояснит, зачем узнавать адрес памяти, где число хранится?
Какое практическое значение это может иметь?
Совершенно незачем его узнавать. И практического значения это не имеет. Разве только для каких-то хитрых отладок. Но этот адрес можно использовать для доступа к переменным.
Простой пример. Подсчитать сумму площадей кругов, заданных своими радиусами.
C++
1
2
3
4
5
6
7
double R[5] = { 1.0, 2.0, 4.5, 2.8, 1.4 }, S=0;
double *pR;
for(int i=0; i<5; i++) {
 pR = R+i;
 S += 3.14* *pR * *pR;
}
cout << S << endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 15:02     Что значит * при объявлении переменной?
Еще ссылки по теме:

C++ Изменяется ли адрес или значение переменной при объявлении ее как const?
Что значит * при создании переменных? C++
Инициализация массива при объявлении C++

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

Или воспользуйтесь поиском по форуму:
zer0mail
2188 / 1871 / 187
Регистрация: 03.07.2012
Сообщений: 6,661
Записей в блоге: 1
12.10.2015, 15:02     Что значит * при объявлении переменной? #9
1. При пердаче массива передается адрес первого элемента, а не сам массив
2. Пишем функцию, которая к первому аргументу прибавляет второй
// так работать не будет, поскольку в вызывающей процедуре i1 не изменится (в параметр функции передается копия i1)
C++
1
2
3
4
   void add (int i1, int i2) 
   {
       i1 += i2;
   }
А так будет, т.к. i2 прибавится к значению переменной, адрес которой в i1:
C++
1
2
3
4
   void add (int *i1, int i2) 
   {
      *i1 += i2;
   }
3. Часто в процедуру передается не сам объект, а его адрес (начала объекта).

Добавлено через 1 час 9 минут
Alex_From_777, "Звездочка" в объявлении стоит не просто так - она обозначает переменную-указатель. А понимание и умение работать с указателями входит в самый-самый базовый минимум Си/Си++ -программиста (как, скажем, понятие производной для математика). Не надо жалеть времени для того, чтобы понять "зачем они нужны, как они устроены, как ими пользоваться". Вот ссылка на главу из учебника: Указатели и массивы.
Часто в объектах поля - не сами объекты, а указатели на какие-то другие объекты, содержащиеся в нашем сложном объекте (или связанные с ним).
Пример: такая вещь, как элемент списка и хранит указатели и использует их как параметры в функциях манипуляции со списком (вставка, удаление элементов). И без них, без указателей - никак.
Yandex
Объявления
12.10.2015, 15:02     Что значит * при объявлении переменной?
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru