2017-12-18 179 views
0

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

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,这给它的地址是正确的吗?

+2

你得到它,因为'无效NEW_STATE(&S,字符*文件,诠释我,诠释J)'完成胡言乱语。函数声明不是函数调用。 – Lundin

+0

请注意,点'.'和箭头' - >'运算符确实非常紧密,并且不应该在它们周围有空格,而不像像''这样的低优先级二元运算符,它们周围应该有空格。是的,这是风格。除了新手代码外,点和箭头周围的空格绝对不常见。 –

回答

1

void new_state(&s,是错误的。

在C应改为

void new_state(state *s, char *file, int i, int j) 
+0

它不是C/C++的混合体,因为调用函数时传入的内容确实是一个地址。这只是一个不正确的函数参数声明。 –

+0

@SergeBallesta,是;固定的。 –

+0

在调用'new_state()'函数时使用'&s'作为第一个参数 – EsmaeelE

0

您必须函数定义和函数调用进行区分。使用参数定义函数时,必须提供每个参数的数据类型,除非它是可变参数列表...

但是,在调用该函数时,应该传递一个常量或兼容类型的变量。

0
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); 
. 
.