如何修改通过引用传递的struct?

时间:2017-04-14 04:32:36

标签: c++ struct undefined

我通过引用将结构传递给函数,因为我想修改函数内部的结构。但是,编译器一直给我"错误C1421:未定义的类/结构/联合" at" ++ kpad.pin_chars;"。我错过了什么?这是我的测试代码:

struct Keypad{
   int pin_chars;
};


void check_keypad(struct Keypad *kpad);


void main(void){
    struct Keypad kpad; 
    kpad.pin_chars = 0;
    check_keypad(&kpad);
}


void check_keypad(struct Keypad *kpad){
    ++kpad.pin_chars;
}

2 个答案:

答案 0 :(得分:1)

您正在使用struct Keypad *kpad语法传递指针。这是*部分。

当您传递指针时,如果没有首先解除引用指针,则无法使用“点”来访问成员。您必须取消引用或使用“箭头”(->)作为您的运营商:

++ *kpad.pin_chars

++kpad->pin_chars

通常,在使用指针时,箭头语法是首选方法。

修改:

值得指出所涉及的各种运营商的precedence。 Postfix ++(和--)具有与.->相同的优先级,但由于位置会绑定到ptr->member++中的成员,而前缀{ {1}}(和++)的优先级低于--.,因此由于优先级而不是位置而绑定到成员访问表达式的结果。

你会以两种略有不同的方式得到结果。

答案 1 :(得分:1)

由于您按地址传递了参数,因此需要取消引用它以获取其值。以下代码有效:

void check_keypad(struct Keypad *kpad){
 ++((*kpad).pin_chars);
}

C为同一目的提供了另一种格式:

void check_keypad(struct Keypad *kpad){
 ++(kpad->pin_chars);
}