鱼C论坛

 找回密码
 立即注册
查看: 2226|回复: 2

顺序链表

[复制链接]
发表于 2019-9-20 06:49:50 | 显示全部楼层 |阅读模式

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

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

x
#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[MAXSIZE];
   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[i]);
    }
    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[index-1];
    return OK;
}
#endif
上面是定义的头文件
问题再我用红笔划出来那里。
当我将L->data[i++]=i时;
L->data[i]遍历后输出的结果很乱。不是按照递增
当我改为L->data[++i]=i后;
发现结果满足预期。按道理来说,两者虽有不同,也只是体现再程序的数值上。怎么会有这样的效果?

i++

i++

++i

++i

question

question
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-20 14:36:18 | 显示全部楼层
本帖最后由 superbe 于 2019-9-20 14:39 编辑

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

在i++的情况下,程序先给data[ i ] 赋值,然后 i 增加1,i 的值变成了 i+1,然后下面的 printf 实际上是输出data[ i+1 ]的值 ,而这个元素还没有赋值(是刚赋值的这个元素的下一个元素)。所以printf出来的是未初始化的未知的数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-23 18:18:59 | 显示全部楼层
superbe 发表于 2019-9-20 14:36
L->data=i;
L->length++;
printf("%d\n",L->data[ i ]);

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 11:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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