首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Unix系统编程11-7的三处不解,求解释

2013-02-19 
Unix系统编程11-7的3处不解,求解释下面是代码,有几处不明白的地方红色的地方为表面不明白的地方1根据C语言

Unix系统编程11-7的3处不解,求解释
下面是代码,有几处不明白的地方
红色的地方为表面不明白的地方
1
根据C语言先申明后引用的原则
strcut foo *fp[NASH]; 
foo是从哪里来的呢?
2
fp->f_next = fh[idx];
fh[idx] = fp->f_next;
这样2句同样的效果吗?还是另有所指向
3
fp->f_next = fh[idx];
fp->f_next等于结构体数组指针idx处,但是我有点不明白,idx之前的地址呢? 指向不确定的位置吗?




#define NHASH   29
#define HASH(fp)        (((unsigned long)fp)%NHASH)

struct foo *fh[NHASH];
pthread_mutex_t hashlock = PTHREAD_MUTEX_INITIALIZER;

struct foo
{
        int                             f_count;        /*protected by hashlock*/
        pthread_mutex_t f_lock;
        struct foo              *f_next;        /*protected by hashlock*/
        int                             f_id;
        /*...more stuff here...*/
};

/* allocate the object*/
struct foo
foo_alloc(void)
{
        struct foo      *fp;
        int             idx;

        if ((fp = malloc(sizeof(struct foo))) != NULL)
        {
                fp->f_count = 1;
                if (pthread_mutex_init(&fp->f_lock, NULL) != 0)
                {
                        free(fp);
                        return NULL;
                }
                idx = HASH(fp);
                pthread_mutex_lock(&hashlock);
                fp->f_next = fh[idx];
                fh[idx] = fp->f_next;
                pthread_mutex_lock(&fp->f_lock);
                pthread_mutex_unlock(&hashlock);
                /* ...continue initialization...*/


        }

        return fp;
}



[解决办法]
1. struct foo *fp[NASH]; 同时声明了结构体foo并定义了foo的指针数组fp。定义结构体指针变量只需要结构体声明,不需要定义。只有真正使用fp访问具体成员的时候才需要foo的定义。

2. 赋值表达式是单向不可交换的...

3. fh是全局变量,是有静态地址的
idx的值是HASH(fp) 这显然是确定的

热点排行