| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1851 人关注过本帖
标题:为什么我把链表头文件的指针传到函数,函数不能修改链表呢?一定要传头文件 ...
只看楼主 加入收藏
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
为什么我把链表头文件的指针传到函数,函数不能修改链表呢?一定要传头文件指针的指针吗?
印象中只要传地址就可以修改数据,这个理解有什么偏颇,请指出。
搜索更多相关主题的帖子: 函数 
2011-06-18 21:09
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:0 
假设是这样的链表
typedef struct linednode
{
int a;
struct linednode *next;
}node,*ptr;
void main()
{
ptr head;
}
这样传head就可以了。没懂楼主说的是啥意思。。。
2011-06-18 21:36
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
收藏
得分:0 
比如:
    定义一个结构体
    定义结构体的指针 *b;  //因为链表需要修改,所以需要指针
    传入链表函数C(b);    //书上这里需要传入(&b)
   
    在函数C中接受(结构体 *b)  //书上这里需要 (结构体**b) ,如果只传入 *b,则链表不能插入任何值,无论输入什么链表都为空
   

伪码是我思路上应该可以的方法,但实际上出现说明上面的错误,理解不能。
2011-06-18 22:14
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:0 
自己试试就知道

********多贴代码,少说空话*******
2011-06-19 01:44
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:8 
程序代码:
typedef struct linklist {
    struct linklist * next;
} linklist, **ListHead;

linklist* initlist(linklist ** pp)
{
    *pp =  NULL;
    return NULL;
}

linklist* insert(linklist **pphead)
{
    linklist *pnewnode, *p;
    pnewnode = (linklist*)malloc(sizeof(linklist));
    pnewnode->next = NULL;
    if (*pphead == NULL)
        *pphead = p;
    else
        for (p = *pphead; p->next != NULL; p=p->next)
            continue;
    p->next = pnewnode;
    return pnewnode;
}

int main(void)
{
    ListHead head;
    initlist(head);
    insert(head);
    insert(head);

    return 0;
}


[ 本帖最后由 cosdos 于 2011-6-19 02:29 编辑 ]

—>〉Sun〈<—
2011-06-19 02:19
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:2 
除了申请头结点创建链表  也就是修改头指针要用2级指针

别的只要传头指针都可以办到

                                         
===========深入<----------------->浅出============
2011-06-19 09:33
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:10 
程序代码:
#include"stdio.h"
#include"stdlib.h"
typedef struct stru{
    int a;
    struct stru *next;
    }linklist;


void create(linklist *head);
void insert(linklist *head);
void print(linklist *head);


int main()
{
    linklist *head=(linklist *)malloc(sizeof(linklist));
    head->next=NULL;
    create(head);
    print(head);
    insert(head);
    print(head);
    getch();
}

void create(linklist *head)
{
    int n=3;
    linklist *p=head;
    while(n)
    {
        linklist *pt=(linklist *)malloc(sizeof(linklist));
        pt->a=n;
        p->next=pt;
        p=pt;
        n--;
    }
    p->next=NULL;
}

void print(linklist *head)
{
    linklist *p=head->next;
    while(p)
    {
        printf("%d\n",p->a);
        p=p->next;
    }
}

void insert(linklist *head)
{
    linklist *p1=head;
    linklist *p2=head->next;
    linklist *p=(linklist *)malloc(sizeof(linklist));
    p->a=4;
    p1->next=p;
    p->next=p2;

}




图片附件: 游客没有浏览图片的权限,请 登录注册

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-06-19 09:55
快速回复:为什么我把链表头文件的指针传到函数,函数不能修改链表呢?一定要传头 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028882 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved