标题:队列中分配内存的问题。
只看楼主
持剑的战士
Rank: 1
等 级:新手上路
帖 子:30
专家分:3
注 册:2019-12-6
结帖率:62.5%
已结贴  问题点数:20 回复次数:2 
队列中分配内存的问题。

typedef int QElemType;
#define MAXQSIZE 100
typedef struct
{
    QElemType  *base;
    int  front;
    int  rear;
}SqQueue;
void  InitQueue(SqQueue  &Q)
{
    Q.base = (QElemType * )malloc(MAXQSIZE * sizeof(QElemType));
    if(!Q.base)  exit(-1);
    Q.front = Q.rear = 0;
}

typedef struct queue
{
    QElemType  base[MAXQSIZE];
    int front;
    int rear;
}SqQueue;
void InitQueue(SqQueue  &Q)
{
    Q = (SqQueuePtr)malloc(sizeof(SqQueue));
    if (!Q)
    {
        printf("存储分配失败!\n");
        exit(-1);
    }
    Q.front = Q.rear = 0;
}
正如我标红处:
第一个问题:在什么情况下要在sizeof(SqQueue)前乘上MAXQSIZE?
第二个问题:为什么①中是给Q.base分配内存,而②中是给Q分配内存,这两种有什么区别?
搜索更多相关主题的帖子: base sizeof 分配 内存 int 
2020-12-20 20:21
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
得分:10 
第一个问题:在什么情况下要在sizeof(SqQueue)前乘上MAXQSIZE?
这个先要了解malloc函数的用途:void *malloc(long Bytes):该函数分配了Bytes个字节,并返回了指向这块内存的指针。
而你的问题:在什么情况下要在sizeof(SqQueue)前乘上MAXQSIZE?.可以转换成:在sizeof(SqQueue)前乘上MAXQSIZE等于多少个字节
字节数够不够用? 这样你就明白了乘不乘在于你的程序需要多少字节,MAXQSIZE是一个字符常量,它可以替换100,500甚至无穷(遗憾c语言没有无穷)


学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-20 21:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你这代码,除了C和C++语法瞎鸡巴混用外,第二段代码的语法也错误得离奇,改都没法改,,处处矛盾。
2020-12-21 08:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504326-1-1.html




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

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