| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2012 人关注过本帖
标题:Q未被初始化的问题
只看楼主 加入收藏
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:7 
Q未被初始化的问题
我在做循环队列的问题,
先来一个我自己写的,可以运行的看看
SequenceQueue1.h
typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue;
void QueueInitiate(SequenceQueue Q)
{

    Q->front = 0;
    Q->count = 0;
}
int QueueNotEmpty(SequenceQueue Q)
{
    if (Q->front == 0)
        return 0;
    else
        return 1;
}
int QueueAppend(SequenceQueue Q, ElemType x)
{
    if (Q->count > 0 && (Q->count + Q->front) == Q->front)
    {
        printf("队列已满无法插入!\n");
        return 0;
    }
    else
    {
        Q->queue[(Q->front + Q->count) % MaxQueueSize] = x;
        Q->count++;
        return 1;
    }
}
int QueueDelete(SequenceQueue Q, ElemType *d)
{
    if (Q->count == 0)
    {
        printf("循环队列已空无数据元素出队列\n");
        return 0;
    }
    else
    {
        *d = Q->queue[Q->front];
        Q->front = (Q->front + 1) % MaxQueueSize;
        Q->count--;
        return 1;
    }
}
void QueueGet(SequenceQueue Q, ElemType *d)
{
    if (Q->count == 0)
    {
        printf("循环队列已空无数据元素可取!\n");

    }
    else
    {
        *d = Q->queue[Q->front];

    }
}
cpp文件
#include<stdio.h>
#include<stdlib.h>
#define MaxQueueSize 10
typedef int ElemType;
#include"SequenceQueue1.h"
int main()
{
    SequenceQueue Q;
    QueueInitiate(&Q);
    int i, d;
    for (i = 0; i < 10; i++)
        QueueAppend(&Q, i);
    for (i = 0; i < 5; i++)
    {
        QueueGet(&Q, &d);
        printf(" %d", d);
        QueueDelete(&Q, &d);
    }
    printf("\n");
    for (i = 0; i < 5; i++)
    {
        QueueAppend(&Q, i);
    }
    for (i = 0; i < 10; i++)
    {
        QueueGet(&Q, &d);
        printf(" %d", d);
        QueueDelete(&Q, &d);
    }
    printf("\n");
    system("pause");
}
这个是可以正常运行的,但下面的这个就不可以了,我只是把结构体变量名弄为指针的,就不行了,没有报错,但是运行就不行,下面错误代码
头文件
typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue;
void QueueInitiate(SequenceQueue Q)
{

    Q->front = 0;
    Q->count = 0;
}
int QueueNotEmpty(SequenceQueue Q)
{
    if (Q->front == 0)
        return 0;
    else
        return 1;
}
int QueueAppend(SequenceQueue Q, ElemType x)
{
    if (Q->count > 0 && (Q->count + Q->front) == Q->front)
    {
        printf("队列已满无法插入!\n");
        return 0;
    }
    else
    {
        Q->queue[(Q->front + Q->count) % MaxQueueSize] = x;
        Q->count++;
        return 1;
    }
}
int QueueDelete(SequenceQueue Q, ElemType *d)
{
    if (Q->count == 0)
    {
        printf("循环队列已空无数据元素出队列\n");
        return 0;
    }
    else
    {
        *d = Q->queue[Q->front];
        Q->front = (Q->front + 1) % MaxQueueSize;
        Q->count--;
        return 1;
    }
}
void QueueGet(SequenceQueue Q, ElemType *d)
{
    if (Q->count == 0)
    {
        printf("循环队列已空无数据元素可取!\n");

    }
    else
    {
        *d = Q->queue[Q->front];

    }
}
cpp文件
#include<stdio.h>
#include<stdlib.h>
#define MaxQueueSize 10
typedef int ElemType;
#include"SequenceQueue1.h"
int main()
{
    SequenceQueue Q;
    QueueInitiate(Q);
    int i, d;
    for (i = 0; i < 10; i++)
        QueueAppend(Q, i);
    for (i = 0; i < 5; i++)
    {
        QueueGet(Q, &d);
        printf(" %d", d);
        QueueDelete(Q, &d);
    }
    printf("\n");
    for (i = 0; i < 5; i++)
    {
        QueueAppend(Q, i);
    }
    for (i = 0; i < 10; i++)
    {
        QueueGet(Q, &d);
        printf(" %d", d);
        QueueDelete(Q, &d);
    }
    printf("\n");
    system("pause");
}
为什么第二种会提示使用了未被初始化的Q,我的Q不是已经初始化了吗,求指教
搜索更多相关主题的帖子: 队列 int count return printf 
2018-10-18 17:08
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:20 
void QueueInitiate(SequenceQueue Q)
{
    Q->front = 0;  这时Q指向哪了?
    Q->count = 0;
}
int main()
{
    SequenceQueue Q;    Q指针未定义
    QueueInitiate(Q);   
2018-10-18 19:20
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
回复 2楼 吹水佬
Q是不是指向了实参的front和count,因为我传过去一个sequenceQueue的指针了,前面个Q指针我觉得是定义了,
因为
typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue;
然后定义的时候 SequenceQueue Q,这时候Q是不是SequenceQueue类型的指针,难道是我理解错了,望指教
2018-10-18 19:39
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:0 
以下是引用一鑫在2018-10-18 19:39:48的发言:

Q是不是指向了实参的front和count,因为我传过去一个sequenceQueue的指针了,前面个Q指针我觉得是定义了,
因为
typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue;
然后定义的时候 SequenceQueue Q,这时候Q是不是SequenceQueue类型的指针,难道是我理解错了,望指教


typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue;

SequenceQueue是一个指针类型
SequenceQueue Q; 这时Q只是一个“名”而无“份”,有名无份,没有实际意义的,也算是未定义。


[此贴子已经被作者于2018-10-18 20:05编辑过]

2018-10-18 20:03
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
回复 4楼 吹水佬
那我应该怎么操作才能使它有意义
2018-10-18 20:40
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
回复 4楼 吹水佬
我有一个糟糕的改法,偶尔可以运行出结果,但是还是会断点,
我给Q分配内存
int main()
{
    SequenceQueue Q;
    Q = (SequenceQueue)malloc(sizeof(SequenceQueue));
    QueueInitiate(Q);
    int i, d;
我知道这样是行不通的;
2018-10-18 20:51
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
收藏
得分:0 
回复 4楼 吹水佬
我知道怎么操作了
这样是可以运行的
typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue,SequenceQueue2;
Q = (SequenceQueue2*)malloc(sizeof(SequenceQueue2));
2018-10-18 21:00
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:0 
以下是引用一鑫在2018-10-18 21:00:12的发言:

我知道怎么操作了
这样是可以运行的
typedef struct
{
    ElemType queue[MaxQueueSize];
    int front;
    int count;
}*SequenceQueue,SequenceQueue2;
Q = (SequenceQueue2*)malloc(sizeof(SequenceQueue2));

这样也可以:
SequenceQueue2 Q2;
SequenceQueue Q = &Q2;
2018-10-18 21:11
快速回复:Q未被初始化的问题
数据加载中...
 
   



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

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