Я просто удостоверяюсь, что понимаю это понятие правильно. С * оператор, я делаю новую переменную, которая выделяется место в памяти. Чтобы к весьма обязательно дублирующимся переменным и их значениям, и оператор привык мимоходом значения к методам и такой, и он на самом деле указывает на исходный экземпляр переменной, в противоположность созданию новых копий... Это правильно? Это - очевидно, мелкое понимание, но я просто хочу удостовериться, что я не перепутывал их.Спасибо!
Не совсем. Вы путаете *
, появляющееся в имени типа (используется для определения переменной), с оператором *
.
int main() {
int i; // i is an int
int *p; // this is a * in a type-name. It means p is a pointer-to-int
p = &i; // use & operator to get a pointer to i, assign that to p.
*p = 3; // use * operator to "dereference" p, meaning 3 is assigned to i.
}
Когда переменная связана с оператором *, эта переменная содержит адрес памяти.
Когда он используется в паре с оператором &, он возвращает адрес, по которому хранится переменная.
Если бы у вас было
int x = 5; //5 is located in memory at, for example, 0xbffff804
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address
, то и x
, и * y
дали бы 5
Для поиска адреса переменной используются &
. Итак, если у вас есть:
int x = 42;
и (например) компьютер сохранил x
по адресу 5
, & x
будет 5
]. Аналогичным образом вы можете сохранить этот адрес в переменной, называемой указателем :
int* pointer_to_x = &x; // pointer_to_x has value 5
Получив указатель, вы можете разыменовать его с помощью *
, чтобы преобразовать его обратно в тип, на который он указывает:
int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x"
// which is the address of x. x has value 42, so y will be 42.