指针如何与预定义的结构进行交互?

所以我有这样的结构:指针如何与预定义的结构进行交互?

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

回到顶部