c 中指针的理解

Understanding pointers - c

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What are the barriers to understanding pointers and what can be done to overcome them?

我真的不熟悉C和指针,我想了解这里发生了什么:

1
2
3
4
5
6
7
8
9
10
11
12
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意味着如果将某个值"val"分配给"0"地址,那么*(q->first)将返回"val"?


否。q->first=0将0分配给队列的属性first。q是指针,但q->first是int。


q->first(*q).first的简称。括号是必要的,因为.将在dereference *之前被评估,并且由于q是一个指针井q.first == NOT A VALID THING所以括号是必要的。

queue aQ;
init_queue(&aQ);

函数init_queue接受指向queue的指针,而不是指向int的指针。这个函数的作用是使initialize结构的所有字段在以后的时间可供其他函数使用。