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

我的职业是看店铺的 2013-02-07 12:55:01
下面是代码,有几处不明白的地方
红色的地方为表面不明白的地方
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;
}


...全文
357 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluewanderer 2013-02-08
  • 打赏
  • 举报
回复
1. struct foo *fp[NASH]; 同时声明了结构体foo并定义了foo的指针数组fp。定义结构体指针变量只需要结构体声明,不需要定义。只有真正使用fp访问具体成员的时候才需要foo的定义。 2. 赋值表达式是单向不可交换的... 3. fh是全局变量,是有静态地址的 idx的值是HASH(fp) 这显然是确定的
东大坡居士 2013-02-07
  • 打赏
  • 举报
回复
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之前的地址呢? 指向不确定的位置吗? //好好看看书噢
AnYidan 2013-02-07
  • 打赏
  • 举报
回复
引用 2 楼 tianweishuiguo 的回复:
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等于……
书不是这样看的
  • 打赏
  • 举报
回复
问题3 刚才想到 指针是32位的话,那么求模,要么是 0 要么是 1 是0的话,是0的话,那么开辟的结构体内存,就是指向自己 但是1的话,为什么需要next个指针指回0呢?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧