读书人

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

发布时间: 2013-02-19 11:11:40 作者: rapoo

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) 这显然是确定的

读书人网 >C语言

热点推荐