指针如何与预定义的结构进行交互?
所以我有这样的结构:指针如何与预定义的结构进行交互?
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;
}
我在一个函数调用这些,其中I定义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)...
}
现在,在函数调用,(当你在主或其他地方使用的函数的)。你有点放了你已经做过的东西来使用。
该声明是通用的(用于任何输入)。该电话是特定的(或特定的)。
这里您指定的参数(或arguments
)您是passing
的函数。
这是调用会是什么样子
. .
.
new_state(&s, file, i, j);
.
.
以上是 指针如何与预定义的结构进行交互? 的全部内容, 来源链接: utcz.com/qa/262293.html