在函数中使用结构对象

时间:2012-11-03 17:55:31

标签: c++ function windows-7 struct

我已经为队列写了一段代码。

#include <iostream>
using namespace std;

struct q
        {
            int items[10];
            int front,rear;
        } queue;

void Addqueue(struct q *queue, int item)
{
    if (queue->rear==9)
        cout << "Queue is Full.";
    else
        queue->items[++queue->rear]=item;
}


int main()
{
    queue.front=queue.rear=-1;
    Addqueue(q *queue,5);
    return 0;
}

正如您所看到的,我已经使用了struct对象。在Addqueue函数中,第一个元素是(struct q * queue),我想知道我应该写什么而不是它,而我在main函数中调用这个函数,例如我测试了Addqueue(q * queue,5)和Addqueue(队列,5)和Addqueue(*队列,5)和Addqueue(struct q *队列,5),但它们都不起作用,我将收到此行的错误。所以我该怎么做?怎么了?

3 个答案:

答案 0 :(得分:1)

正确的语法是Addqueue(&queue, 5)Addqueue接受指向struct q的指针,因此您需要获取地址为queue的{​​{1}}地址才能传入。

那就是说,你应该绝对使用std::queue<int>而不是你自己的本土队列。

答案 1 :(得分:1)

#include <iostream>
using namespace std;

struct q
{
    int items[10];
    int front,rear;
} queue;

void Addqueue(q *queue, int item)
{
    if (queue->rear==9)
        cout << "Queue is Full.";
    else
        queue->items[++queue->rear]=item;
}


int main()
{
    queue.front=queue.rear=-1;
    Addqueue(&queue, 5);
    return 0;
}

这是正确的方法。

答案 2 :(得分:1)

您创建了指向struct q的指针,但它没有分配内存。指针q *queue的本地名称会覆盖您的对象queue