В чем разница между ->
и .
при вызове переменных в структуре? Я видел, что они оба используются в разных сценариях, но не могут определить разницу между ними.Разница в вызовах переменных структуры
ответ
->
означает, у вас есть переменная, которая указывает на кусок памяти, содержащий структуры. Чтобы получить доступ к своим членам, вы должны разыменовать указатель, а затем добавить смещение к члену.->
делает это за вас..
означает, что ваша переменная составляет, и вам нужно только добавить смещение к члену.
Как пользователь Элиот B указывает, если у вас есть указатель s
на структуру, то доступ к члену elem
может быть сделано двумя способами: s->elem
или (*s).elem
.
С (*s)
у вас есть выражение, что «есть» структура, и теперь вы используете dot-оператор для доступа к elem
.
s->elem
равно (*s).elem
Разница касается определенного экземпляра структуры. '->' и '.' операторы всегда о левом операнде.
Если левый операнд является указателем, то вы используете '->', иначе вы используете '.'.
Например.
struct Foo bar1;
struct Foo* bar2 = malloc(sizeof(struct Foo));
bar1.variable = "text";
bar2->variable = "text";
x->y
(->
является указатель на оператора члена) эквивалентно (*x).y
. Из-за приоритета оператора вы не можете написать *x.y
, поскольку это будет оцениваться как *(x.y)
.
Первый легче напечатать и намного понятнее. Он используется, когда x
является указателем на структуру, содержащую элемент y
.
- 1. Повторное использование переменных/объектов в обратных вызовах
- 2. Разница в указателях функций и регулярных вызовах
- 3. Управление * арг разница в вызовах функций
- 4. «Обновление» карты/структуры данных в последовательных вызовах функций в Clojure
- 5. Распределение переменных структуры C?
- 6. Настройка переменных структуры - C
- 7. Вложенная инициализация переменных структуры
- 8. Сравнение переменных структуры
- 9. Печать переменных структуры
- 10. Хранение глобальных переменных в рекурсивных вызовах функций в памяти
- 11. Разница в переменных переменных при использовании Paramiko
- 12. разница между «структуры» и «значение структуры»
- 13. node.js как обрабатывать изменение объектов и переменных в обратных вызовах
- 14. Оптимизация RequireJS при использовании переменных в вызовах require()
- 15. Разница инициализации переменных в C++
- 16. Разница в переменных/постоянных декларациях
- 17. ActionScript - разница объявления переменных
- 18. Получение переменных из структуры - c
- 19. чтения переменных в структуры типа в цикл
- 20. Объявление и инициализация переменных структуры
- 21. Ошибка при инициализации переменных структуры
- 22. Разница указателей между членами структуры?
- 23. Объявление переменных внутри структуры в c
- 24. правила видимости для переменных структуры в GCC
- 25. Изменение переменных структуры в методах C++
- 26. Те же имена переменных в разные структуры
- 27. Инициализация переменных члена структуры в C++
- 28. Алиас для переменных типа структуры в C
- 29. разница рекурсии в BST структуры данных
- 30. Разница между следующей реализацией структуры в C++
Один используется, когда у вас есть * указатель * на структуру. Другой - когда у вас есть * экземпляр * структуры. Пожалуйста [найдите хорошую книгу, чтобы прочитать об этом] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list). –