them0b 发表于 2021-6-10 11:52:52

新手C语言数据结构学习

想问一下各位大佬为什么我这段代码没有输出啊。
#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 = p;
    }
    L.MaxSize = L.MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(L);
    for (int i = 0; i < 5;i++)
    {
      L.data = 2*i;
      L.length++;
    }
    IncreaseSize(L, 5);
    for (int i = 0; i < L.length;i++)
    {
      printf("%d", L.data);
    }
    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 }
没有别的了
真真想不明白

万千只cnm 发表于 2021-6-10 13:56:20

你传整个结构体不如传 指针   
不会改变实参结构体的值
两个L.data 的地址都不会是一样 只是名字一样白分配
https://blog.csdn.net/weixin_51420051/article/details/110946597

tian1234 发表于 2021-6-10 14:05:23

InitList的参数改成SeqList *L

tian1234 发表于 2021-6-10 14:07:24

tian1234 发表于 2021-6-10 14:05
InitList的参数改成SeqList *L

另一个也改了哈

them0b 发表于 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

them0b 发表于 2021-6-10 15:23:26

tian1234 发表于 2021-6-10 14:07
另一个也改了哈

我改成传递指针的输出也不一样
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

them0b 发表于 2021-6-10 15:32:33

them0b 发表于 2021-6-10 15:23
我改成传递指针的输出也不一样
PS E:\C项目\data struct\SeqList> cd "e:\C项目\data struct\SeqList\"...

哦不对,结果还是像之前一样没有输出

them0b 发表于 2021-6-10 15:33:03

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

不对不对,结果还是像之前那样没有输出

万千只cnm 发表于 2021-6-10 15:47:12

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

里面内容也要改呀   
调用也要取地址&

them0b 发表于 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 = p;
    }
    L->MaxSize = L->MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(&L);
    for (int i = 0; i < 5;i++)
    {
      L.data = 2*i;
      L.length++;
    }
    IncreaseSize(&L, 5);
    for (int i = 0; i < L.length;i++)
    {
      printf("%d ", L.data);
    }
    printf("MaxSize is :%d", L.MaxSize);
    return 0;
}

tian1234 发表于 2021-6-10 17:23:41

你这是在学写哈希表吗{:5_109:}

万千只cnm 发表于 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循环赋值,打印也不解引用呀?
页: [1]
查看完整版本: 新手C语言数据结构学习