【问题标题】:c- pointer from integer without castc-来自整数的指针,没有强制转换
【发布时间】:2018-02-13 19:12:46
【问题描述】:

我正在尝试在具有有限节点数的主函数中创建扩展二叉树。

问题是编译器一直显示

错误:从“int”类型分配给“struct node”类型时出现不兼容的类型

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#define NULLitem (-1)

typedef struct node * link;
struct node {   
    int item;
    link l;
    link r;
}


link NEW (int item, link l, link r)
{
        link x = malloc(sizeof * x);
        x->item = item;
        x->l = l;
        x->r = r;
        return x;
}

void Tprint(link p, int indent)
{
    int i;
    if (p!=NULL){
        Tprint(p->r, indent+4);
        for(i=0; i<indent; i++)
            printf(" ");
        printf("%d\n", p->item);
        Tprint(p->l,indent+4);
    }
}

int main(void)
{
    link T, M, N, z, Root;
    z = NEW(NULLitem,NULL,NULL);
    Root->item = 6;
    T = NEW(5, NULL, NULL);
    Root->l = T;

    M = NEW(7, NULL, NULL);
    Root->r = M;
    M->l= NEW(NULLitem, NULL, NULL);
    M->r= NEW(9,z,z);

    N = NEW(2,z,z);
    T->l = N;
    T->r = NEW(NULLitem,NULL, NULL);

    Tprint(Root,3);
    return 0;
}

【问题讨论】:

  • 在哪里你得到错误?请编辑您的问题,以显示这些地方,例如代码中的 cmets。
  • 另外,您永远不会让Root 指向任何地方,这会导致每当您取消引用该指针时都会导致未定义的行为
  • struct node { int item; link l; link r; } ;
  • 固定格式

标签: c tree binary-tree


【解决方案1】:

错误在第 12 行(编译器说明了一切),“无强制转换的整数指针”是一个警告,如果您更正程序第 12 行的错误,该警告将消失。

您实际上在这里忘记了分号:

struct node {   int item;
                link l;
                link r;
        }

在大括号后面写一个分号,你的程序应该是这样的:

#include <stdio.h>
#include <stdlib.h>
#define NULLitem (-1)

typedef struct node * link;
struct node {   int item;
                link l;
                link r;
        };


link NEW (int item, link l, link r){
        link x = malloc(sizeof * x);
        x->item = item;
        x->l = l;
        x->r = r;
        return x;
}


void Tprint(link p, int indent){
        int i;
        if (p!=NULL){
                Tprint(p->r, indent+4);
                for(i=0; i<indent; i++)
                        printf(" ");
                printf("%d\n", p->item);
                Tprint(p->l,indent+4);
        }
}

int main(void)
{
   link T, M, N, z, Root;
    z = NEW(NULLitem,NULL,NULL);
    Root->item = 6;
   T = NEW(5, NULL, NULL);
     Root->l = T;

   M = NEW(7, NULL, NULL);
   Root->r = M;
    M->l= NEW(NULLitem, NULL, NULL);
    M->r= NEW(9,z,z);

   N = NEW(2,z,z);
    T->l = N;
    T->r = NEW(NULLitem,NULL, NULL);

    Tprint(Root,3);
    return 0;
}

输出如下:

           -1
       9
           -1
   7
       -1    6
       -1
   5
           -1
       2
           -1

运行没有任何错误。

【讨论】:

  • Root-&gt;item = 6; --> Root = NEW(6, NULL, NULL);
  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多