所以我有这样的结构:
struct state {
int previous[2];
int current[2];
bool pen;
};
typedef struct state state;
在一些函数中,我使用它作为参数,例如:
void new_state(&s, char *file, int i, int j){
int new = s -> current[j];
s -> current[j] = operand(byte(i, file)) + s -> current[j];
s -> previous[j] = new;
}
我在一个函数中调用它们,在那里我将s定义为来自状态:
void main_function(char *file){
state s;
display *display = newDisplay(file, 200, 200);
int j = size(file);
for(int i=0; i<j; i++){
if(opcode(byte(i, file)) == 0){
new_state(&s, file, i, 0);
}
else if(opcode(byte(i, file)) == 1){
new_state(&s, file, i, 1);
draw(s, display, file);
}
else if(opcode(byte(i, file)) == 2){
pause(display, operand(byte(i, file)) * 10);
}
else{
new_pen(s);
}
end(display);
}
}
但是在编译时我仍然会收到错误消息:期望的声明说明符或'&'令牌之前的'...',但我不明白为什么。我已经将变量s定义为结构状态的一部分,然后使用&s,这给了它正确的地址?
void new_state(&s,
错了。
在C中应该阅读
void new_state(state *s, char *file, int i, int j)
您必须区分函数定义和函数调用。使用参数定义函数时,必须提供每个参数的数据类型,除非它是变量参数列表...
。
但是,在调用函数时,应传递兼容类型的常量或变量。
void new_state(&s, char *file, int i, int j){
int new = s -> current[j];
s -> current[j] = operand(byte(i, file)) + s -> current[j];
s -> previous[j] = new;
}
你的代码中的这个是函数定义。 struct state
是一种数据类型。 s
只是struct state
类型的变量。 &s
(在s
定义的范围内)也指记忆中s
的地址。
你真正想做的是创建一个函数,它指向struct state
类型的任何变量。这将是正确的语法
void new_state(struct state * s, char * file, int i, int j){
...(function body)...
}
现在,在函数调用中,(当你在main或其他地方使用函数时)。你有点放置你已经使用过的东西。
声明是通用的(用于任何输入)。然而,呼叫是特定的(或特定的)。
在这里你指定你是arguments
函数的参数(或passing
)。
这就是电话的样子
.
.
.
new_state(&s, file, i, j);
.
.