2014-11-09 13 views
0

Пара вопросов по этим строкам, но я не совсем понимаю их.Указатель с арифметикой с structs

struct bundle 
{ 
    int x; 
    int y; 
}; 

void foo(struct bundle *A, int p) 
{ 
    A->x = p; 
    A->y = p; 
} 

main() 
{ 
    struct bundle ptr; 
    foo(&ptr, 0); 
    //printf("%d",*(ptr + 1)); ISSUE HERE 
} 

Мое заявление о печати не работает ... Любые идеи?

Я использую онлайн C компилятор, который дает мне эту ошибку

invalid operands to binary + 

, но я не думаю, что компилятор не имеет ничего общего с ним.

Я пробовал отличить его от (int *), но не повезло. Я уверен, что делаю правильный *(ptr + 1), и мне не нужно делать *(ptr + sizeof(int)) или что-нибудь в этом роде.

Спасибо за помощь!

+0

потому что 'ptr' не является указателем –

+0

Что вы ожидали от печати, и почему? – JS1

ответ

2

ptr не указатель. Это struct bundle. Вы должны взять адрес с &:

printf("%d", *(&ptr + 1)); 

Это будет результата, конечно, в undefined behaviour, но это хорошо сформирован.

Возможно, вы имели в виду printf("%d", ptr.y); или printf("%d", ptr.x + 1);?