鱼C论坛

 找回密码
 立即注册
查看: 2832|回复: 11

新手C语言数据结构学习

[复制链接]
发表于 2021-6-10 11:52:52 | 显示全部楼层 |阅读模式

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

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

x
想问一下各位大佬为什么我这段代码没有输出啊。
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10

typedef struct{
    int *data;
    int MaxSize, length;
} SeqList;

void InitList(SeqList L){
    L.data = (int *)malloc(InitSize * sizeof(int));
    L.length = 0;
    L.MaxSize = InitSize;
}

void IncreaseSize(SeqList L,int len)
{
    int *p = L.data;
    L.data = (int *)malloc((L.MaxSize + len) * sizeof(int));
    for (int i = 0; i < L.length;i++)
    {
        L.data[i] = p[i];
    }
    L.MaxSize = L.MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(L);
    for (int i = 0; i < 5;i++)
    {
        L.data[i] = 2*i;
        L.length++;
    }
    IncreaseSize(L, 5);
    for (int i = 0; i < L.length;i++)
    {
        printf("%d", L.data[i]);
    }
    printf("MaxSize is :%d", L.MaxSize);
    return 0;
}
输出结果就是:PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\" ; if ($?) { gcc SeqList.c -o SeqList } ; if ($?) { .\SeqList }
没有别的了
真真想不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-10 13:56:20 | 显示全部楼层
你传整个结构体不如传 指针   
不会改变实参结构体的值
两个L.data 的地址都不会是一样 只是名字一样  白分配  
https://blog.csdn.net/weixin_51420051/article/details/110946597
QQ图片20210610135503.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 14:05:23 | 显示全部楼层
InitList的参数改成SeqList *L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 14:07:24 | 显示全部楼层
tian1234 发表于 2021-6-10 14:05
InitList的参数改成SeqList *L

另一个也改了哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 15:22:56 | 显示全部楼层
万千只cnm 发表于 2021-6-10 13:56
你传整个结构体不如传 指针   
不会改变实参结构体的值
两个L.data 的地址都不会是一样 只是名字一样  白 ...

我改成传递指针的输出也不一样
PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\" ; if ($?) { gcc shishi.c -o shishi } ; if ($?) { .\shishi }
9966736 0 9961808 0 8  
MaxSize is :15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 15:23:26 | 显示全部楼层

我改成传递指针的输出也不一样
PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\" ; if ($?) { gcc shishi.c -o shishi } ; if ($?) { .\shishi }
9966736 0 9961808 0 8  
MaxSize is :15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 15:32:33 | 显示全部楼层
them0b 发表于 2021-6-10 15:23
我改成传递指针的输出也不一样
PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\"  ...

哦不对,结果还是像之前一样没有输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 15:33:03 | 显示全部楼层
them0b 发表于 2021-6-10 15:22
我改成传递指针的输出也不一样
PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\"  ...

不对不对,结果还是像之前那样没有输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 15:47:12 | 显示全部楼层
them0b 发表于 2021-6-10 15:22
我改成传递指针的输出也不一样
PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\"  ...

里面内容也要改呀   
调用也要取地址&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 16:03:08 | 显示全部楼层
万千只cnm 发表于 2021-6-10 15:47
里面内容也要改呀   
调用也要取地址&

这个我明白的,都改过来了

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10

typedef struct{
    int *data;
    int MaxSize, length;
} SeqList;

void InitList(SeqList *L){
    L->data = (int *)malloc(InitSize * sizeof(int));
    L->data = 0;
    L->MaxSize = InitSize;
}

void IncreaseSize(SeqList *L,int len)
{
    int *p = L->data;
    L->data = (int *)malloc((L->MaxSize + len) * sizeof(int));
    for (int i = 0; i < L->length;i++)
    {
        L->data[i] = p[i];
    }
    L->MaxSize = L->MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(&L);
    for (int i = 0; i < 5;i++)
    {
        L.data[i] = 2*i;
        L.length++;
    }
    IncreaseSize(&L, 5);
    for (int i = 0; i < L.length;i++)
    {
        printf("%d ", L.data[i]);
    }
    printf("MaxSize is :%d", L.MaxSize);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 17:23:41 | 显示全部楼层
你这是在学写哈希表吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 18:25:36 | 显示全部楼层
void InitList(SeqList *L){
    L->data = (int *)malloc(InitSize * sizeof(int));
    L->data = 0;
    L->MaxSize = InitSize;
}
你这又赋值 0 干嘛
 for (int i = 0; i < 5;i++)
    {
        L.data = 2*i;
        L.length++;
    }
for循环赋值,打印也不解引用呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 14:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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