В следующей функции,В чем разница между `* a =` и `= * a`?
void swap(int * a, int * b) {
int t;
t = *a; // = *a
*a = *b; // a* =
*b = t;
}
В чем разница между = *a
и *a =
?
Я слышал, что *
оператор в = *a
является де-ссылки (или в режиссуры) оператор, который Fetches (?) это значение из указателя.
Тогда, каково фактическое значение *a =
?
Вчера, на следующий день я задал этот вопрос, я объяснил про указатели на мой коллега, основная область не имеет ничего общего с указателями.
Я быстро напечатал исходный код, как это.
#include <stdio.h>
void swap1(int a , int b) {
int t = a;
a = b;
b = t;
}
void swap2(int * a, int * b) {
int t = *a;
*a = *b;
*b = t;
}
int main(int argc, char * argv[]) {
int a = 10;
int b = 20;
swap1(a, b);
swap2(&a, &b);
}
Я даже горжусь собой для запоминания вещей, запечатленных на мой мозг в 1996 году (я был с Java в течение почти 20 лет.) я использовал кучу printf
с с %d
с и %p
чтобы показать ей, что происходит.
Тогда я сделал ужасная ошибка. I указанный.
포인터 변수 앞에 별 을 붙이면 값 을 가져온다 는 뜻 이에요.
Когда вы прикрепляете STAR перед указателем указателя, это означает, что вы извлекаете (извлекаете) значение.
Ну, что может быть применено к следующему утверждению.
int t = *a;
который просто можно сказать,
int t = 10;
Большая проблема, которую я столкнулся пришел из второго утверждения.
*a = *b; // 10 = 20?
Корень зла в том, что я не пытался объяснить о dereference operator или я не просил себе быть в курсе смысла в 별 (звезда).
Вот что скажут люди.
для
= *a
,фактического значения по адресу, обозначенного
a
назначен на левую сторону.для
*a =
величина правой части хранится в адрес, обозначенном
a
.
Вот что я сбиваю с толку. И именно поэтому я должен переосмыслить смысл «де-ссылки».
Спасибо за ответы.
О, я думаю, что эта проблема будет глубже понятий lvalue
с и rvalue
с.
Кажется, что снова время для Бинки: http://cslibrary.stanford.edu/104/ – alk