【问题标题】:invalid type argument of unary ‘*’ (have ‘int’)一元“*”的无效类型参数(有“int”)
【发布时间】:2014-02-13 17:11:53
【问题描述】:
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')的无效类型参数出现在注释行。有人可以告诉我有什么问题吗?谢谢:)

【问题讨论】:

    标签: c++ pointers struct types


    【解决方案1】:

    -&gt; 运算符已取消引用该指针。再次应用* 会尝试取消引用(apartments+pos)-&gt;floor,它是int 类型。删除*

    编辑:写这个更常见:

        apartments[pos].floor = i;
    

    【讨论】:

    • 因为-&gt; 运算符的优先级高于*,所以表达式解析为*((apartments+pos)-&gt;floor) 并且* 应用于int 值,因此编译器发出错误消息:"invalid type argument of unary ‘*’ (have ‘int’)"。无论如何使用*-&gt; 是毫无意义的!即使想使用*.(dot),他也必须写(*(apartments + pos)).floor,因为* 的优先级低于. 运算符。这看起来也不必要的复杂。使用[] 运算符,我们可以写成apartments[pos].floor = i;。这里我们不需要任何(),因为[] 的优先级更高;)
    • apartments[pos].floor = i; 解析为(apartments[pos]).floor = i; 因为apartments[pos] 只不过是*(apartments + pos ) 所以(apartments[pos]).floor = i;(*(apartments + pos)).floor = i; 相同
    猜你喜欢
    • 2021-10-15
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多