您的位置:首页 > 其它

全局变量和局部变量以及&的问题

2016-05-10 20:46 253 查看
先输入一个字符串 然后求先中后序遍历
http://paste.ubuntu.org.cn/4213378
#include

#include

char w[100];

struct node

{

char data;

struct node *l;

struct node *r;

};

void creat(struct node *&T,char *w)  //这里去掉&会无限循环**************

{

char ch;int p;

ch=*w;

if(ch=='\0') p=1;

if(ch==',') {T=NULL;w++;}

else

{

T=(struct node *)malloc(sizeof(struct node));

T->data=ch;

w++;

// printf("%c",T->data);

creat(T->l,w);

creat(T->r,w);

}

}

void travel(struct node *T)

{

if(T)

{

travel(T->l);

printf("%c",T->data);

travel(T->r);

}

}

void travel2(struct node *T)

{

if(T)

{

travel2(T->l);

travel2(T->r);

printf("%c",T->data);

}

}

void travel3(struct node *T)

{

if(T)

{

printf("%c",T->data);

travel3(T->l);

travel3(T->r);

}

}

int main()

{

struct node *head,*T;

scanf("%s",w);

T=NULL;

creat(T,w);

// printf("%c",head->r->data);

travel3(T);

printf("\n");

travel(T);

printf("\n");

travel2(T);

printf("\n");

}

你这样传参不行的,你递归调用的时候对w的++操作是不会影响到外层调用它的函数里的w的,因为你操作的是它的一个拷贝而已

(虽然他们指向的是同一块内存区域,但他们两个指针本身并不是同一个,除非你传二级指针或者一级指针的引用)

PS:我这里用了一个全局的指针

 #include <stdio.h>

#include<stdlib.h>

char *w;

struct node

{

    char data;

    struct node *l;

    struct node *r;

};

void creat(struct node *&T)

{

    char ch;int p;

    ch=*w;

    if(ch=='\0') p=1;

    if(ch==',')

    {

        T=NULL;

        w++;

    }

    else

    {

        T=(struct node *)malloc(sizeof(struct node));

        T->data=ch;

        w++;

        // printf("%c",T->data);

        creat(T->l);

        creat(T->r);

    }

}

void travel(struct node *T)

{

    if(T)

    {

        travel(T->l);

        printf("%c",T->data);

        travel(T->r);

    }

}

void travel2(struct node *T)

{

    if(T)

    {

        travel2(T->l);

        travel2(T->r);

        printf("%c",T->data);

    }

}

void travel3(struct node *T)

{

    if(T)

    {

        printf("%c",T->data);

        travel3(T->l);

        travel3(T->r);

    }

}

int main()

{

    struct node *head,*T;

    char str[100];

    scanf("%s",str);

    w = str;

    T=NULL;

    creat(T);

    // printf("%c",head->r->data);

    travel3(T);

    printf("\n");

    travel(T);

    printf("\n");

    travel2(T);

    printf("\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: