spongebobyey 发表于 2019-9-20 06:49:50

顺序链表

#ifndef HEADER_H
#define HEADER_H
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
#include<stdio.h>
typedef int Status;
typedef int ElemType;
typedef struct{
   ElemType data;
   int length;
}SqList;

Status InitSqList(SqList *L)
{
   L->length=0;
   return OK;
}
Status CreateList(SqList *L)
{
    int i=0,j=0;
    while(i<MAXSIZE)
    {
      if(L->length==MAXSIZE)
      {
            printf("顺序表已满!");
            return FALSE;
      }
      L->data[++i]=i;
      //i++是先给第一个赋值,再自增。而++i是先自增再赋值
      L->length++;
      printf("%d\n",L->data);
    }
    return TRUE;
}
Status GetElem(SqList *L,int index)
{
    ElemType *e;
    if(index<=L->length || index > L->length ||L->length == 0)
    {
      return ERROR;
    }
    *e=L->data;
    return OK;
}
#endif
上面是定义的头文件
问题再我用红笔划出来那里。
当我将L->data=i时;
L->data遍历后输出的结果很乱。不是按照递增
当我改为L->data[++i]=i后;
发现结果满足预期。按道理来说,两者虽有不同,也只是体现再程序的数值上。怎么会有这样的效果?

superbe 发表于 2019-9-20 14:36:18

本帖最后由 superbe 于 2019-9-20 14:39 编辑

L->data=i;
L->length++;
printf("%d\n",L->data[ i ]);

在i++的情况下,程序先给data[ i ] 赋值,然后 i 增加1,i 的值变成了 i+1,然后下面的 printf 实际上是输出data[ i+1 ]的值 ,而这个元素还没有赋值(是刚赋值的这个元素的下一个元素)。所以printf出来的是未初始化的未知的数。

spongebobyey 发表于 2019-9-23 18:18:59

superbe 发表于 2019-9-20 14:36
L->data=i;
L->length++;
printf("%d\n",L->data[ i ]);


收到
页: [1]
查看完整版本: 顺序链表