我通过引用将结构传递给函数,因为我想修改函数内部的结构。但是,编译器一直给我"错误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;
}
答案 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);
}