鱼C论坛

 找回密码
 立即注册
查看: 2104|回复: 4

两次函数调用结果不一样

[复制链接]
发表于 2020-2-20 12:10:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
知识点是链表部分的
以下是声明
#define OBJECT char name[]
#define null NULL

typedef struct node NODE;

struct node{
        char name[20];
        NODE *p;
};

static int size = 0;
static NODE *first = null;
static NODE *last = null;
static NODE nullNode = {"", null};

然后有这样3个方法
NODE getNode(OBJECT){
        NODE temp = nullNode;
        int i = 0;
        while(temp.name[i++] = name[i]){}
        return temp;
}

void addFirst(OBJECT){
        NODE node = getNode(name);
        void toString();
        size++;
        if(!first){
                first = &node;
                last = first;
                toString();
                return;
        }
        node.p = first;
        first = &node;
}

void toString(){
NODE node = *first;
    printf("%s,%d\n", node.name, node.p);
    printf("%s,%d\n", first ->name, first->p);
}

…………

然后调用addFirst时里面的toString输出是正常的,之后什么都不做,调用toString就全是烫了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-20 20:04:42 | 显示全部楼层
问问题把代码上全好吧。
我也简单问下你
i = 1
i怎么就等于1了?????请帮忙解答下。


搞懂不懂在问问题的人这点基本的道理都不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 17:39:04 | 显示全部楼层
ba21 发表于 2020-2-20 20:04
问问题把代码上全好吧。
我也简单问下你
i = 1

我贴出的代码已经可以跑起来了,main方法也没调用其他的,难道除了贴主要代码,其他几百行无关紧要的也要贴出来?
而且我问题很清楚了。在addFirst里面不是调用了一次toString()么,我在调用addFirst()之后再调用一次toString()就不正常了。
下面这行代码和我的贴的有什么区别,就少了个头文件,你跟我说没贴全。
#include <stdlib.h>
#include <stdio.h>

#define OBJECT char name[]
#define null NULL

typedef struct node NODE;

struct node{
        char name[20];
        NODE *p;
};

static int size = 0;
static NODE *first = null;
static NODE *last = null;
static NODE nullNode = {"", null};

NODE getNode(OBJECT){
        NODE temp = nullNode;
        int i = 0;
        while(temp.name[i++] = name[i]){}
        return temp;
}

void addFirst(OBJECT){
        NODE node = getNode(name);
        void toString();
        size++;
        if(!first){
                first = &node;
                last = first;
                toString();
                return;
        }
        node.p = first;
        first = &node;
}

void toString(){
NODE node = *first;
    printf("%s,%d\n", node.name, node.p);
    printf("%s,%d\n", first ->name, first->p);
}

main(){
        addFirst("123");
        toString();
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 00:00:17 | 显示全部楼层
没有报错未声明码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 14:35:57 | 显示全部楼层

没有啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 22:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表