c指针(2)

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct LNode
{
    char data;
    struct LNode *next;
}LinkList;

void CreatList(LinkList *h,char a[],int n)
//void CreatList(char a[],int n)
{
    int i;
    LinkList *s;
    //LinkList *h;
    //创建头结点
    h=(LinkList *)malloc(sizeof(LinkList));    /*创建头结点*/
    if(h==NULL)
    {
        printf("内存分配失败!\n");
        exit(0);
    }
    //最后一个节点空
    h->next=NULL;
    //头插法
    for(i=0;i<n;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));/*创建新结点*/
        if(s==NULL)
        {
            printf("内存分配失败!\n");
            exit(0);
        }
        s->data=a[i];
        s->next=h->next;            /*将*s插在原开始结点之前,头结点之后*/
        h->next=s;
    }
    //head=h;
}
void PrintLink(LinkList *h)
{
    LinkList *p=NULL;

    if(h->next==NULL)
    {
        printf("空表!\n");
        return ;
    }
    while (h->next)
    {
        printf("   %c",h->next->data);
        h=h->next;
    }
    printf("\n");
}

int main()
{
    char c[6]={'a','b','c','d','e','f'};
    LinkList *head=NULL;
    CreatList(head,c,6);
    PrintLink(head);
    return 0;
}

编译通过,运行失败。

因为CreatList函数运行完成后,h就被释放掉了,与head无关,这里是传值。

修改head为全局变量,接收h:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct LNode
{
    char data;
    struct LNode *next;
}LinkList;
LinkList *head=NULL;
//void CreatList(LinkList *h,char a[],int n)
void CreatList(char a[],int n)
{
    int i;
    LinkList *s;
    LinkList *h;
    //创建头结点
    h=(LinkList *)malloc(sizeof(LinkList));    /*创建头结点*/
    if(h==NULL)
    {
        printf("内存分配失败!\n");
        exit(0);
    }
    //最后一个节点空
    h->next=NULL;
    //头插法
    for(i=0;i<n;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));/*创建新结点*/
        if(s==NULL)
        {
            printf("内存分配失败!\n");
            exit(0);
        }
        s->data=a[i];
        s->next=h->next;            /*将*s插在原开始结点之前,头结点之后*/
        h->next=s;
    }
    head=h;
}
void PrintLink(LinkList *h)
{
    if(h->next==NULL)
    {
        printf("空表!\n");
        return ;
    }
    while (h->next)
    {
        printf("   %c",h->next->data);
        h=h->next;
    }
    printf("\n");
}

int main()
{
    char c[6]={'a','b','c','d','e','f'};
    
    //CreatList(head,c,6);
    CreatList(c,6);
    PrintLink(head);
    return 0;
}

那么,如何用局部变量来接收头指针呢?

c++可以用 CreatList(LinkList *&h,char a[],int n),那么c呢?

先到这里,有空继续写。

posted @ 2013-12-19 21:56  乾卦  阅读(230)  评论(0编辑  收藏  举报