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

Указатели это переменные в которых содержатся адреса других переменных?

Например int* ptrX = x; тут сохраняется адрес переменной x? или вот так int* ptrX = &x; и если изменю значение переменной ptrX то это отразится также и на переменной x? А есть вот такая запись int* ptrX = 14; тогда что хранится в переменной 14 или адрес байта памяти где сохранилось значение 14?
Да, указатель - это адрес в явном виде.

Если x - целочисленная переменная, то:

int* ptrX = x; // присваивание ptrX ЗНАЧЕНИЯ переменной x
int* ptrX = &x; // то, что нужно: присваивание адреса переменной x
int* ptrX = 14; // в ptrX записывается значение 14 (не адрес числа 14, а само число 14).

Нет, если ты меняешь значение ptrX, на x это никак не сказывается. Просто в ptrX будет новый адрес памяти.

Чтобы поменять значение x, надо написать:
*ptrX = новое_значение;

Особым случаем в C/C++ являются массивы: любой массив - указатель. И значением массива является адрес его начала.
Dsd Dad
Dsd Dad
79 144
Лучший ответ
Андрей Фролов В GO срезы тоже являются некими указателями на первый элемент?
Григорий Сороговец Стоило бы уточнить, что на самом деле массив в C++ всё же не указатель, хотя может приводиться к нему. Но int *k,m[5]; m=k; не пройдет, да и sizeof для них дадут разные значения.
Григорий Сороговец Должно пройти.
Да указатель это переменая в которой содержится адрес чего либо.
Нет если вы меняете указатель, то вы меняете только указатель, а не ту переменную на которую он указывал. Если есть желание изменить ту переменную, то нужно использовать разыменовывание для изменения переменной
int x = 7;
int *pInt = &x;
*pInt = 10; //в переменной "х" будет число 10, а значек звездочки в данном случае разыменовывание указателя

Зачастую указатели не используют с одной переменной, так как с переменной можно и так работать на прямую. Но в книге, что бы показать вам как пользоваться указателями используют указатель на переменую. В реальности частенько указатели используют на структуры, классы или массивы и т. п.
Игорь Белый
Игорь Белый
15 408
Если Вы не драйвера пишите, то лучше получать какие то значения указателей по выделенной памяти, а не наоборот. То есть такое не прокатит int* bad=12345. нужно определить указатель, а потом уже присваивать ему адрес статики или динамики
Алмаз Шакиров
Алмаз Шакиров
3 832