Каково различие между * и и операторы в программировании c?

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

18
задан gsamaras 10 August 2016 в 19:15
поделиться

3 ответа

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

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.
}
40
ответ дан 30 November 2019 в 06:09
поделиться

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

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

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

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

4
ответ дан 30 November 2019 в 06:09
поделиться

Для поиска адреса переменной используются & . Итак, если у вас есть:

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.
12
ответ дан 30 November 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: