C: Как я могу написать (x -> x-> x), используя (.) Оператор точки - PullRequest
0 голосов
/ 30 октября 2011

Что касается структур и указателей, как я могу написать это выражение x->x->x, используя оператор точки?

Используя оператор стрелки: x->x->x Я легко получаю доступ к третьему элементу.Используя оператор точки: (*x).x Как я могу получить доступ к третьему элементу, используя оператор точки?

Я знаю, что стрелка является ярлыком для оператора точки, поэтому должна быть возможность получить доступ к третьему элементу, используя оператор точки?Я мог бы использовать переменную:

struct node *var
var = (*ptr).next
(*var).x = some value

Это действительно раздражает меня.Искал в учебниках и везде в интернете и не могу найти ответ.

Ответы [ 5 ]

7 голосов
/ 30 октября 2011

Ну x -> x эквивалентно (*x).x Так что вы просто делаете это дважды:

(*(*x).x).x

. крепче связывает этот унарный *, так что приоритет работает.Если вы чувствуете себя параноиком, вы можете сделать:

(*((*x).x)).x
2 голосов
/ 30 октября 2011

Вы бы никогда не захотели бы сделать это в реальной жизни, но

(*p1).x

является членом x в объекте, указанном p1;

(*((*p1).p2)).y

является членом y в объекте, указанном p2, который является членом в объекте, указанном p1, а

(*((*((*p1).p2)).p3).z

является членом zв объекте, указанном p3, который является членом объекта, на который указывает p2, который является членом объекта, на который указывает p1.

Вполне возможно, что это можетбыть сделано с меньшим количеством скобок, но они определенно помогают с пониманием.

2 голосов
/ 30 октября 2011

Учитывая, что x->y эквивалентно (*x).y, затем примените это правило дважды:

x->x->x;
(*x).x->x;
(*(*x).x).x;
1 голос
/ 30 октября 2011
(*(*x).x).x

Но почему, ой, почему ????

0 голосов
/ 30 октября 2011

Вложенная разыменование ...

(*(*x).x).x

Я Подумайте , что приведет вас туда. Относительно того, почему ты хочешь делать такие вещи ... безобразный, безобразный, безобразный.

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