2014-02-13 2 views
0
struct Apartment { 
    int floor;  // aparment's floor 
}; 

void main() { 
    Apartment apartments[10];// array containing all the apartments 

    create_apartments(apartments); 
}; 

void create_apartments(struct Apartment *apartments) { 
    int i,pos; 

    pos=0; 
    for(i=0;i<10;i++){ 
     *(apartments+pos)->floor = i; //error apears here! 
     pos++;    
    } 
} 

В строке комментариев появляется недопустимый аргумент типа унарного '*' (есть 'int'). может кто-нибудь сказать мне, что случилось? спасибо :)Недопустимый аргумент типа unary '*' (has 'int')

ответ

2

Оператор -> уже разыменовывает указатель. Применение * снова пытается разыменовать (apartments+pos)->floor, который относится к категории int. Удалите *.

EDIT: Это даже чаще просто написать это:

apartments[pos].floor = i; 
+0

Поскольку приоритет '- оператора>' выше, то '*' так выражение парезов как '* ((квартиры + Pos) -> этаж) 'И' * 'применяется к значению' int', поэтому компилятор выдает сообщение об ошибке: '' недопустимый аргумент типа унарного '*' (есть 'int') ". В любом случае использование '*' с '->' бессмысленно! Даже если вы хотите использовать '*' и '.' (dot), тогда он должен написать' (* (apartments + pos)). Floor', потому что приоритет '*' ниже, чем '.'. это также выглядит излишним осложнением. используя '[]' оператор, и мы можем написать 'apartments [pos] .floor = i;'. Здесь нам не нужно никаких '()' потому что '[]' приоритет выше;) –

+0

'apartments [pos] .floor = i;' parses as '(apartments [pos]). Floor = i;' потому что ' квартиры [pos] 'ничего, кроме' * (апартаменты + pos) 'so' (квартиры [pos]). floor = i; 'такое же, как' (* (апартаменты + pos)). floor = i; ' –

Смежные вопросы