Другие языки программирования и технологии

Для чего в С++ нужна звездочка вот такая *?

Для чего в С++ нужна звездочка вот такая *? Например int *a; ну и про другие применения расскажите... Объясняйте как можно подробней и на пальцах до меня долго доходит!!!
Это указатель на адрес

int b = 11
int *a = &b;

// *a сейчас 11, a - адрес указывающий на перемпнную b

b = 15;
// *a сейчас так же 15

*a = 100;
// b сейчас 100

// А вот так вы скорее всего получите Exception
a = 12345;
*a = 12;

// Так как первым действием задали адрес, который не принадлежит стеку вашего процесса

Тут нужно читать и пробовать )) По другому никак
Владимир Власов
Владимир Власов
3 274
Лучший ответ
Ко всем предыдущим остается только добавить, что кроме указателя, * также означает умножение в формулах.
Владимир Фомин
Владимир Фомин
95 304
* используется по-разному. зависит от места применения.

* оператор умножения
int a, b,c;
c = a * b; // оператор умножения a и b
с *= а; // оператор умножения с присваиванием, равносильно c = c * a;

* в определении типа переменной
int a, *b, **c;
a - переменная типа int,
b - переменная типа указатель на int
c - переменная типа указатель на указатель на int
указатель- это переменная, содержащая адрес другой переменной

* оператор разыменования указателя.
Если переменная-указатель содержит адрес другой переменной, то чтобы использовать переменную на которую "смотрит" указатель, указатель нужно разыменовать.

int a, *b;
b = &a;// инициализация указателя, теперь b смотрит на a;
*b = 20;// переменной на которую смотрит b (т. е. - a) присвоить значение 20
int c = *b; // c присвоить значение переменной, на которую смотрит b
Читай и разбирайся. Это в двух словах не расскажешь.
Если разбирёшся с "этой звёздочкой",можешь считать, что ты в С/С++ перешёл Рубикон.

int x=10;
int *a=&x; //в "а" записали адрес переменной "х"

*a=10; //(разыменование) равно значению переменной "x" или содержимому ячейки, на которую указывает "а"
int *pa=&a;//(взятие адреса) создаём новый указатель, в который записываем адресс "а"
a=&b; //теперь в "а" хочем записать адрес переменной "в",но отсос, такой переменной ещё нет
int b=20; //создадим переменную "в"
*a=b; //значение, имеющееся по адресу, записанному в "а" изменим на "в",т. е. на 20.Теперь х=20

Ещё у начинающих вызывает замешательство такая фигня:
int x=10;
int *a=&x;
*a=10;
И в первом и во-втором случае есть"*а".Но в первом случае присваивается адрес, а во-втором число. Что за нелепость? Что там себе думал Страуструп? И молодой программист попадает в ступор.
Всё очень просто. Первое выражение рассматривайте так
(int *) a=&x;
В этот момент "*" не имеет отношения к получению значения. Просто объявляется переменная "а",в которую записывается адрес переменной "х". "*" здесь говорит о том, что мы создаём указатель, а не простую переменную и всё.Такой синтаксис объявления указателей. Первое время, чтоб привыкнуть, вообще пишите так, в две строки:
int *a; //объявили указатель
a=&x;//записали в него адрес
int d=*a;//теперь d присвоили значение, которое находится в памяти по адресу, записаному в "а"

х==10;
a==0x33787974(или что-то похожее) ;
d==10;
боюсь начинающему программисту такие объяснения не помогут. надо пробовавть самому.
если вы вначале изучение не поймете назначение указателя, адресную арифметику, то дальнейшее изучение можно прекратить. читайте, учите, пробуйте.