我是一个初学者(在C中)试图编写一个简单的自动机。我有一个数组automaton[]
,指向lTransitions
类型结构的50个指针。我想调用addTransition(&automaton, s1, &t)
添加到列表的转换(t
指向刚刚使用malloc()
创建的结构...)。如果automaton[state1]
为NULL
,那么我需要将其替换为t
指向的地址。否则,我需要关注链,直到automaton[state1]->next
为NULL
。
问题是测试总是返回false,因为*(automaton+e1)
是指针的地址而不是它应指向的结构(如果没有则为NULL)。
非常感谢任何帮助。
以下是我的代码的关键行:
struct lTransitions { char c;
int stateNext;
struct lTransition *next };
struct lTransitions *automaton[50]=NULL;
void addTransition( struct lTransition **automaton, int state1, struct lTransition *t){
...
if (*(automaton+e1)==NULL) { *(automaton+e1) = t; }
else { ... }
答案 0 :(得分:1)
由于您传递的是整个数组而不是数组的地址,因此您无法访问其元素,因此您需要取消引用它才能访问元素:
if (*((*automaton)+e1)==NULL) ...
或以更好的方式写下来:
if ((*automaton)[e1] == NULL) {
(*automaton)[e1] = t;
}
automaton是指向数组的指针,(* automaton)是数组。
这段代码的正确性取决于你调用函数的方式,并且你已经从你的例子中删除了它。下次写一个完整的例子。