| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 242 人关注过本帖
标题:对结构体动态初始化的问题
只看楼主 加入收藏
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:3 
对结构体动态初始化的问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100

typedef int Elemtype;
typedef struct SqList
{
    Elemtype data[MaxSize];
    int length; //顺序表的长度
};
void Init__List(struct SqList *sq);
int Length__List(struct SqList sq);
Elemtype Get__List(struct SqList sq, int index);
int Locate__List(struct SqList sq, int value);
void Insert__List(struct SqList*sq,int index,int value);
void Delete__List(struct SqList *sq, int index);
int main(void)
{

    struct SqList sq;
    Init__List(&sq);
    printf("线性表的长度是%d\n", sq.length);

    system("pause");
    return 0;
}

void Init__List(struct SqList *sq)
{
    //sq = (struct SqList *)malloc(sizeof(struct SqList));  问题:只有把这句注释了,上面的长度是0,否则是垃圾值,是为啥呢
    sq->length = 0;
}
/*
typedef struct SqList
{
    Elemtype data[MaxSize];
    int length; //顺序表的长度
};
*/
//求顺序表的长度
int Length__List(struct SqList sq)
{

    return sq.length;
}
/*
返回线性表L中的第i个元素的值或地址
*/
Elemtype Get__List(struct SqList sq, int index)
{
    if (index <= 0 || index > sq.length)
    {
        return -1; //-1表示不存在
    }

    return sq.data[index - 1];
}

int Locate__List(struct SqList sq, int value)
{
    for (int i = 1; i <= sq.length; i++)
    {
        if (sq.data[i - 1] == value)
        {
            return i - 1;
        }
    }

    return -1;
}
void Insert__List(struct SqList*sq,int index,int value)
{
    if (index <= 0 || index > sq->length + 1)
    {
        printf("插入的位置错误\n");
    }

    for (int i = sq->length - 1; i >= index - 1; i--)
    {
        sq->data[i + 1] = sq->data[i];
    }
    sq->data[index - 1] = value;
    sq->length++;
}

void Delete__List(struct SqList *sq, int index)
{
    if (index <= 0 || index > sq->length)
    {
        printf("删除的位置错误\n");
    }

    for (int i = index - 1; i < sq->length; i++)
    {
        sq->data[i] = sq->data[i + 1];
    }

    sq->length--;
}
搜索更多相关主题的帖子: data int length index struct 
2021-06-08 08:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:417
帖 子:7997
专家分:46955
注 册:2011-1-18
收藏
得分:20 
你的意思是
    struct SqList sq;
    struct SqList* p_sq = &sq;
    p_sq->length = 0;
正确,但
    struct SqList sq;
    struct SqList* p_sq = &sq;
    p_sq = malloc(sizeof(struct SqList));
    p_sq->length = 0;
错误?

这个基础的知识,还是要多读书。
第一段代码 p_sq 指向 sq,因此 p_sq->length 就是 sq.length;
第二段代码 p_sq 指向一个新分配的内存,p_sq->length 不是 sq.length,sq.length 没有被初始化或赋值。
2021-06-08 08:25
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
收藏
得分:0 
回复 2楼 rjsp
谢谢老哥了
2021-06-08 08:37
东南风
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:5
注 册:2016-9-2
收藏
得分:0 
回复 楼主 Knightl8
程序代码:
/*
struct SqList* sq;
sq = Init__List();
*/
struct SqList* Init__List()
{
    struct SqList* p;
    p = (struct SqList *)malloc(sizeof(struct SqList));  
    if (p!=NULL)
        p->length = 0;
    return p;
}
2021-06-09 10:39
快速回复:对结构体动态初始化的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061116 second(s), 8 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved