-3

重複の可能性:
ポインターを理解する上での障壁は何ですか? また、それらを克服するために何ができるでしょうか?

私は本当にcとポインターに慣れていません。ここで何が起こっているのか理解したいです:

typedef struct {
        int q[QUEUESIZE+1];
        int first;
        int last;
        int count;
} queue;
init_queue(queue *q)
{
        q->first = 0;
        q->last = QUEUESIZE-1;
        q->count = 0;
}

q->first = 0 は、アドレス '0' に何らかの値 'val' を割り当てた場合、 *(q->first) は 'val' を返すことを意味しますか?

4

2 に答える 2

3

いいえ、q->first = 0 は、キューの属性 first に 0 を割り当てています。q はポインタですが、q->first は int です。

于 2013-01-27T20:53:19.617 に答える
1

q->firstは の省略形です。 は の前に評価される(*q).first
ため、括弧が必要です。.dereference *qq.first == NOT A VALID THING


queue aQ;
init_queue(&aQ);

関数は、へのポインターではなくinit_queueへのポインターを取ります。 この関数の役割は、後で他の関数が構造体のすべてのフィールドを使用できるようにすることです。 queueint
initialize

于 2013-01-27T20:55:38.520 に答える