这是一个非常简单的函数来建立二叉树。
我用它打印
“作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,
作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,作为第一个添加,“。
这意味着Build_tree(first_TR, A);。为什么?我也试过first_TR == 0
不起作用:(

typedef struct SElementBST {
    struct SElementBST  *left, *right; /* wskaźnik na kolejny element listy */
    unsigned slowo[DlugoscSlow+1]; /* przechowywana wartość */
}   TBST;

TBST *first_TR = 0;

void Build_tree(TBST *first, unsigned char array[IloscSlow][DlugoscSlow+1])
{

    int i,k,m;
    TBST *tmp, *parent;

    for(i=0;i<IloscSlow;i++)
    {

        if(!first_TR)
        {
            first = (TBST*) malloc(sizeof(TBST));
            first -> left = 0;
            first -> right = 0;
            printf("added as first, ");
            for(k=0;k<DlugoscSlow+1;k++)
                    first -> slowo[k] = array[i][k];
        }
        else
        {
            tmp = first;

            while(tmp != 0)
            {
                k = 0;
                parent = tmp;

                while ((tmp->slowo[k] == array[i][k]) && (k<DlugoscSlow-1))
                               k++;

                if(tmp->slowo[k] < array[i][k]) tmp = tmp -> right;
                else tmp = tmp -> left;

            }

            tmp = (TBST*) malloc(sizeof(TBST));
            tmp -> left = 0;
            tmp -> right = 0;

            for(m=0;m<DlugoscSlow+1;m++)
                tmp-> slowo[m] = array[i][m];

            if(parent->slowo[k] < array[i][k]) parent -> right = tmp;
            else parent -> left = tmp;
        }
    }
}

最佳答案

如果你有这个:

void something(type *p) {
  p = somethingelse;
}

int main() {
  type *a = ...;
  something(a);
}

函数something中的赋值不会更改调用方(a此处)中main的值。指针是按值传递的,这意味着指针值的副本被赋予函数something
如果希望能够更改调用方中a指向的内容,则需要将指针传递给指针。
void something(type **p) {
 *p = somethingelse;
}

int main() {
 type *a;
 something(&a);
}

你不能在代码中的任何地方更改first_TR。所以它一直保持空值。
或者你不需要第一个,你的代码应该是:
if(!first)
{
 first = malloc(sizeof(TBST));
 ...
}

或者你确实需要它,你可以:
if(!first_TR)
{
 first = malloc(sizeof(TBST));
 ...
 first_TR = first;
}

(您不需要在malloc中投射C的结果)

关于c - 链接列表...不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5522504/

10-11 21:02