顺序链表
#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: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出来的是未初始化的未知的数。 superbe 发表于 2019-9-20 14:36
L->data=i;
L->length++;
printf("%d\n",L->data[ i ]);
收到
页:
[1]