Я пытаюсь получить доступ к членам в структуре tCAN_MESSAGE. То, что я думаю, будет работать, как первый пример в main, то есть some_ptr->canMessage_ptr->value = 10;
. Но у меня есть код, который кто-то написал, и я вижу, что этот человек использовал some_ptr->canMessage_ptr[i].value;
. Можно ли сделать это первым способом?
Выражение
some_ptr->canMessage_ptr[i].value
на 100% эквивалентно
(*(some_ptr->canMessage_ptr + i)).value
, что в свою очередь равно 100 % эквивалентен
(some_ptr->canMessage_ptr + i)->value
. Когда i
равен 0 , это, конечно, эквивалентно
some_ptr->canMessage_ptr->value
Так что да, можно использовать some_ptr->canMessage_ptr->value
, пока рассматриваемый индекс равен 0. Если индекс всегда 0, тогда цепочка операторов стрелок, как вы предполагаете, является хорошим стилем. В противном случае я рекомендую использовать комбинацию стрелок и операторов индексирования, которые вы видите на практике.
Мы часто используем указатели на структуры, содержащие указатель на другую структуру (как в примере ниже), но я никогда не вижу применения ptr1->ptr2->value
?
Я склонен подозревать, что вы не до конца понимаете, с чем работаете. Использование формы some_ptr->canMessage_ptr[i].value
предполагает, что ваш тип tSOMETHING
содержит указатель на первый элемент массива , возможно, многих tCAN_MESSAGE
с, что является тонким, но важным отличием. В этом случае, да, как показано выше, вы можете связать операторы стрелок для доступа к элементу first такого массива (с индексом 0). Однако самый чистый синтаксис для доступа к другим элементам этого массива состоит в использовании оператора индексации, и он платит за согласованность.