为什么这个C 链表只输出量第一个节点呢?
问题描述
输入一个素组,输出一个链表的每个节点值。
问题出现的环境背景及自己尝试过哪些方法
是不是返回值的问题?
相关代码
#include <stdio.h> // 预编译命令
#include <stdlib.h>
//#include <malloc.h>
#define NULL 0 // 定义空指针常量
struct TM // 定义TM结构
{
int x, y; // 整型变量x,y
struct TM *next; // 指向TM结构的指针
};
int i;
struct TM *list_create(void)
{
struct TM n[8], *head, *p; // 声明TM型结构数组n[8],TM结构指针head,p
for(i = 1; i <= 7; i++) // 循环体开始
{
printf("Input The Value of [%d]x [%d]y \n", i,i); // 提示输入第i个结构的x值
scanf("%d %d", &(n[i].x),&(n[i].y)); // 输入a scanf("%d", &(n[i].x));
}
head = &n[1]; // 链表头部指向n[1]
for(i = 1; i <= 7; i++) // 将结构数组n形成链表
{
n[i].next = &n[i + 1]; // n[i]的next指针指向下一个结构n[i+1]
}
n[7].next = NULL; // 链表尾部指向空
/* for(int m=0;m<sizeof(n)/sizeof(n[0]);++m)
{
printf("%d\n",n[m]);
} */
//p = head;
//printf("p=%d\n",typeof(p));
return head;
}
void list_print(struct TM *head)
{ struct TM *p;
p = head; // p指向链表头部head
i = 0; // i赋值为1
do // 直到型循环,用于输出链表内容
{
printf("Node Value%d: x=%d, y=%d\n", i, p->x, p->y); // 循环体开始, 输出结点内容((*p).x,(*p).y)
p = p->next; // p指向相邻的下一个结点
i = i + 1; // 计数i加1
}
while (p != NULL); // 未到链表尾部,则继续循环
};
void main()
{
struct TM *head;
head = list_create();
list_print(head);
}
n
是一个局部变量,函数返回之后它就消失了。所以 head 在函数返回之后变成了一个非法地址(因为它指向的对象不在了)。
后面的一片都是未定义行为。什么结果都有可能。