标题:链表指针问题
只看楼主
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
 问题点数:0 回复次数:11 
链表指针问题
程序代码:
#include <stdio.h>
struct  ListNode
{
    int m_nKey;
    ListNode * m_pNext;
};
unsigned int GetListLength(ListNode * head)
{
    if (head == NULL)
        return 0;
    unsigned int length = 0;
    ListNode * p = head;
    while (p)
    {
        length += 1;
        p = p->m_pNext;
    }
    return length;
}
int main(int argc, char *argv)
{
    ListNode abc[5] =
    {
        { 1,0 },
        { 2,0 },
        { 3,0 },
        { 0,0 },
        { 5,0 }
    };
    abc[0].m_pNext = &abc[1];
    abc[1].m_pNext = &abc[2];
    abc[2].m_pNext = &abc[3];
    abc[3].m_pNext = &abc[4];
    abc[4].m_pNext = &abc[5];
    printf("\n In total,There %d dates\n", GetListLength(abc));
    getchar();
    return 0;
}


为什么遍历链表个数的p 无法读取head的地址呢,  还有  我
程序代码:
ListNode abc[5] =
    {
        { 1,0 },
        { 2,0 },
        { 3,0 },
        { 0,0 },
        { 5,0 }
    };

abc[0].m_pNext = &abc[1];
    abc[1].m_pNext = &abc[2];
    abc[2].m_pNext = &abc[3];
    abc[3].m_pNext = &abc[4];
    abc[4].m_pNext = &abc[5];


为什么不能放到主函数之外初始化
搜索更多相关主题的帖子: 链表 int length head abc 
2018-10-25 11:42
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:0 
放在主函数外,你这要构造函数!

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-10-25 12:07
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
得分:0 
回复 2楼 Tomorrw_I
??? 这不是结构体吗
2018-10-25 12:34
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:0 
回复 3楼 a15022606145
有点忙,没太细看代码!我没有说head的事!
我是说的,你初始化!你在主函数定义了变量,想在主函数外部赋值!
那就需要,另外写一个函数赋值,在主函数中调用赋值函数!

这个赋值函数,就类似构造函数了!

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-10-25 12:49
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:0 
我上面回复的,都是如何在主函数外,初始化

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-10-25 12:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
#include <stdio.h>
struct ListNode
{
    int m_nKey;
    struct ListNode * m_pNext;
};
unsigned int GetListLength(struct ListNode * head)
{
    if (head == NULL)
        return 0;
    unsigned int length = 0;
    struct ListNode * p = head;
    while (p)
    {
        length += 1;
        p = p->m_pNext;
    }
    return length;
}
int main(int argc, char *argv)
{
    struct ListNode abc[5] =
    {
        { 1,0 },
        { 2,0 },
        { 3,0 },
        { 0,0 },
        { 5,0 }
    };
    abc[0].m_pNext = &abc[1];
    abc[1].m_pNext = &abc[2];
    abc[2].m_pNext = &abc[3];
    abc[3].m_pNext = &abc[4];
    abc[4].m_pNext = NULL;
    printf("\n In total,There %d dates\n", GetListLength(abc));
    getchar();
    return 0;
}
2018-10-25 14:59
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
得分:0 
回复 6楼 吹水佬
???
2018-10-25 16:41
MeandC
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:8
帖 子:245
专家分:792
注 册:2018-7-14
得分:0 
头指针head是指向结构体的指针,所以就错了啊。可以用typedef这个语句。
typedef struct listnode{
    int data;
    listnode *next;
}lnode,*linklist;
这样的话主函数里面的那个头指针head就用linklist head声明或者用lnode *head,这两句是一样的。也就是说head 的数据类型是linklist或者lnode*其这两个实都一样。用struct listnode * 也是一样,但是太长所以不建议。

C果然是有点难啊!
2018-10-25 18:38
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
得分:0 
回复 8楼 MeandC
typehead的作用不就是起一个别名吗? 我传递地的实参是abc   直接传递abc也就是head的地址为什么不行么??  就是 *p =head  head有数值,但是 当while(p)的时候,层序就会异常出错
2018-10-26 11:09
MeandC
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:8
帖 子:245
专家分:792
注 册:2018-7-14
得分:0 
回复 9楼 a15022606145
看你的程序,定义了结构体但是没用到结构体。
struct ListNode{
    各条语句;
};
你没用改名的话声明结构体的时候是要在前面加上struct 的,直接用ListNode 是不可以的。,比如struct ListNOde abc[5];指针类数组的话struct ListNode *abc[5] 。


C果然是有点难啊!
2018-10-26 12:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490668-1-1.html




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

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