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

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

Войти
Регистрация
Восстановить пароль
 
Wbgury
88 / 85 / 2
Регистрация: 16.05.2010
Сообщений: 272
#1

Обьясните простым языком об указателях * и & - C++

17.03.2012, 14:48. Просмотров 1231. Ответов 4
Метки нет (Все метки)

Всё что в книгах прочитал, но толком не могу понять зачем нужны * и &. Обьясните кто может, простым языком...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 14:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обьясните простым языком об указателях * и & (C++):

обьясните функцию простым языком :) - C++
Обьясните плиз, почему в main() возможна такая d3 = 10.0 + d1; операция? Тоесть на первом месте стоит 10.0 потом обьект. Я понял что это...

Народ, обьясните пожалуйста человеческим языком задание - C++
Если можно напишите кусками кода, или хотя-бы словами порядок выполнения

Написать программу более простым языком (как заменить std::cout на printf? ) - C++
#include <iostream> #include <stdio.h> #include <iomanip> using namespace std; int main() { int const n = 5; int...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Об указателях - C++
В чем разница между этими двумя строчками? int* x; int *x;

немного об указателях - C++
есть код: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() { int inta=1234; int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
17.03.2012, 14:58 #2
Короче, указатель - это переменная хранящая адрес чего-либо (в зависимости от типа указателя). Для чего нужны. Допустим есть объект в 1 мегабайт и его надо передать в функцию. Что быстрее сделать: скопировать адрес в 4 байта или скопировать переменную в 1 мегабайт?

Ссылка есть разыменованный указатель, нужен больше для удобства. Пример
C++
1
2
3
4
int x = 100;
int *a = &x;
//...
int c = *a + 10;        //выглядит не так красиво как с ссылком (см. ниже)
или
C++
1
2
3
4
int x = 100;
int &a = x;        //ссылку надо инициализировать сразу, потом
//...
int c = a + 10;          //выглядит явно лучше
Ну это так, в двух словах, лучше попытаться прочитать еще пару раз главу, если опять непонятно написано, ищите в других книгах. Фоурм оставляйте на последнее.

Цитата Сообщение от Wbgury Посмотреть сообщение
зачем нужны * и &.
Об этом должно быть написано довольно таки понятно.
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
17.03.2012, 15:06 #3
Отвечу кодом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void MyFunc(int b)
{
 b = 5 + 5 + 5 + 5 + 5;
}
 
void MyFuncWithP(int *pB)
{
 *pB = 5 + 5 + 5 + 5 + 5;
}
 
int main(int argc, char* argv[])
{
 int b = 0;
 MyFunc(b);
 cout << b << endl;
 MyFuncWithP(&b);
 cout << b << endl;
 
 getch();
 return 0;
}
Скомпилируйте и гляньте. Естественно это крошечная возможность указателей
Wbgury
88 / 85 / 2
Регистрация: 16.05.2010
Сообщений: 272
17.03.2012, 15:31  [ТС] #4
dimcoder, большое спасибо! всё понял! что то я не догнал что там адресс, а теперь понял!
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.03.2012, 20:08 #5
* - доступ к памяти по указателю, & - взятие указателя по данному. То есть
C++
1
2
3
4
5
6
7
8
9
10
int a; // Здесь декларирован обычная переменная
int *b; // А это указатель, то есть целое специального вида, хранящее адрес обычного целого
b=a; // Указателю b присваивается значение переменной a, что не правильно, так как для хранения обычных целых указатели не предназначены
b=&a; // Указателю b присваивается адрес переменной a, для хранения которого указатель и предназначен
a=b; // Переменной a присваивается адрес из указателя b, что в большинстве случаев не правильно
a=*b; // Переменной a присваивается значение данного по адресу из указателя b, для такого применения адреса и предназначены
a=b[1]; // Переменной a присваивается значение следующей ячейки после той, чей адрес хранится в  указателе b, адреса предназначены и для такого применения
a=*(b+1); // Переменной a присваивается значение следующей ячейки после той, чей адрес хранится в  указателе b, адреса предназначены и для такого применения
a=b[-1]; // Переменной a присваивается значение предыдущей ячейки перед той, чей адрес хранится в  указателе b, адреса предназначены и для такого применения
a=*(b-1); // Переменной a присваивается значение предыдущей ячейки перед той, чей адрес хранится в  указателе b, адреса предназначены и для такого применения
На месте 1 и -1 моут быть любые обычные целые, будь то константы, или переменные.
C++
1
2
3
4
int a;
int *b;
int *c;
a=b-c; // Переменной a присваивается разность адресов в указателях b и c, измеренная в ячейках для хранения целого
C++
1
2
3
4
int a;
double *b;
double *c;
a=b-c; // Переменной a присваивается разность адресов в указателях b и c, измеренная в ячейках для хранения переменной типа double
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 20:08
Привет! Вот еще темы с ответами:

Ошибка в указателях - C++
Здравствуйте, не понимаю почему выводит мусор. Вроде бы все правильно сделал. Знаю что можно было сделать p = rand(); но меня это не...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

Совсем запутался в указателях - C++
Шестую строку не могу понять, по моему перед массивом var должен стоять &amp;. const int MAX = 3; int _tmain(int argc, _TCHAR* argv) {...

Реализация стека на указателях - C++
Стек на указателях: #include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; enum FirstNodeEnum{NoFirstNode,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.03.2012, 20:08
Ответ Создать тему
Опции темы

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