在C中,如何访问指针数组(作为参数传递)

时间:2017-11-05 14:56:26

标签: c arrays list pointers

我是一个初学者(在C中)试图编写一个简单的自动机。我有一个数组automaton[],指向lTransitions类型结构的50个指针。我想调用addTransition(&automaton, s1, &t)添加到列表的转换(t指向刚刚使用malloc()创建的结构...)。如果automaton[state1]NULL,那么我需要将其替换为t指向的地址。否则,我需要关注链,直到automaton[state1]->nextNULL

问题是测试总是返回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 { ... }

1 个答案:

答案 0 :(得分:1)

由于您传递的是整个数组而不是数组的地址,因此您无法访问其元素,因此您需要取消引用它才能访问元素:

if (*((*automaton)+e1)==NULL) ...

或以更好的方式写下来:

if ((*automaton)[e1] == NULL) {
    (*automaton)[e1] = t;
}

automaton是指向数组的指针,(* automaton)是数组。

这段代码的正确性取决于你调用函数的方式,并且你已经从你的例子中删除了它。下次写一个完整的例子。