vanity_chang 发表于 2020-2-20 12:10:35

两次函数调用结果不一样

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

typedef struct node NODE;

struct node{
        char name;
        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 = name){}
        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就全是烫了

ba21 发表于 2020-2-20 20:04:42

问问题把代码上全好吧。
我也简单问下你
i = 1
i怎么就等于1了?????请帮忙解答下。


搞懂不懂在问问题的人这点基本的道理都不懂。

vanity_chang 发表于 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;
      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 = name){}
      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");
}

卖橘子的柚子 发表于 2020-2-28 00:00:17

没有报错未声明码

vanity_chang 发表于 2020-2-28 14:35:57

卖橘子的柚子 发表于 2020-2-28 00:00
没有报错未声明码

没有啊
页: [1]
查看完整版本: 两次函数调用结果不一样