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

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

Восстановить пароль Регистрация
 
Wbgury
 Аватар для Wbgury
88 / 85 / 2
Регистрация: 16.05.2010
Сообщений: 272
17.03.2012, 14:48     Обьясните простым языком об указателях * и & #1
Всё что в книгах прочитал, но толком не могу понять зачем нужны * и &. Обьясните кто может, простым языком...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 14:48     Обьясните простым языком об указателях * и &
Посмотрите здесь:

обьясните функцию простым языком :) C++
C++ Об указателях
C++ немного об указателях
Расскаэите о указателях на функции C++
Народ, обьясните пожалуйста человеческим языком задание C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
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
 Аватар для Wbgury
88 / 85 / 2
Регистрация: 16.05.2010
Сообщений: 272
17.03.2012, 15:31  [ТС]     Обьясните простым языком об указателях * и & #4
dimcoder, большое спасибо! всё понял! что то я не догнал что там адресс, а теперь понял!
taras atavin
Ушёл с форума.
 Аватар для 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
Yandex
Объявления
17.03.2012, 20:08     Обьясните простым языком об указателях * и &
Ответ Создать тему
Опции темы

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