В чем разница между операторами * и & в программировании на c? - PullRequest
18 голосов
/ 24 апреля 2010

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

Ответы [ 3 ]

40 голосов
/ 24 апреля 2010

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

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.
}
12 голосов
/ 24 апреля 2010

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

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.
4 голосов
/ 24 апреля 2010

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

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

Если бы у вас было

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...