zoukankan      html  css  js  c++  java
  • 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("内存分配失败!
    ");
            exit(0);
        }
        //最后一个节点空
        h->next=NULL;
        //头插法
        for(i=0;i<n;i++)
        {
            s=(LinkList *)malloc(sizeof(LinkList));/*创建新结点*/
            if(s==NULL)
            {
                printf("内存分配失败!
    ");
                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("空表!
    ");
            return ;
        }
        while (h->next)
        {
            printf("   %c",h->next->data);
            h=h->next;
        }
        printf("
    ");
    }
    
    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("内存分配失败!
    ");
            exit(0);
        }
        //最后一个节点空
        h->next=NULL;
        //头插法
        for(i=0;i<n;i++)
        {
            s=(LinkList *)malloc(sizeof(LinkList));/*创建新结点*/
            if(s==NULL)
            {
                printf("内存分配失败!
    ");
                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("空表!
    ");
            return ;
        }
        while (h->next)
        {
            printf("   %c",h->next->data);
            h=h->next;
        }
        printf("
    ");
    }
    
    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呢?

    先到这里,有空继续写。

  • 相关阅读:
    以太坊智能合约 Solidity 的常用数据类型介绍
    使用 Browser-solidity 在 Go-Ethereum1.7.2 上进行简单的智能合约部署
    Linux学习笔记之vim中的替换功能
    深度学习笔记之为什么是SoftMax
    机器学习笔记之Jupyter Notebook各种使用方法
    机器学习笔记之TF-IDF原理及使用
    机器学习笔记之LATEX数学公式基本语法
    机器学习笔记之Anaconda中命令形式安装XGBoost(pip install)
    机器学习笔记之XGBoost实现对鸢尾花数据集分类预测
    ELK学习笔记之Elasticsearch和Kibana数据导出实战
  • 原文地址:https://www.cnblogs.com/qiangua/p/3482935.html
Copyright © 2011-2022 走看看