Подтвердить что ты не робот

В чем разница между операторами * и & в программировании c?

Я просто убедился, что правильно понимаю эту концепцию. С оператором * я создаю новую переменную, которой выделено место в памяти. Чтобы не излишне дублировать переменные и их значения, оператор и используется для передачи значений методам и тому подобное, и это фактически указывает на исходный экземпляр переменной, а не на создание новых копий... Правильно? Это, очевидно, неглубокое понимание, но я просто хочу убедиться, что я не смешиваю их. Спасибо!

4b9b3361

Ответ 1

Не совсем. Вы вводите в заблуждение *, который появляется в имени типа (используется для определения переменной), с оператором *.

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.
}

Ответ 2

Один использует &, чтобы найти адрес переменной. Поэтому, если у вас есть:

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.

Ответ 3

Когда переменная сопряжена с оператором *, эта переменная содержит адрес памяти.

Когда он сопряжен с оператором и, он возвращает адрес, в котором удерживается переменная.

Если у вас

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