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呢?
先到这里,有空继续写。