C中的指针/数组问题

bar*_*hen 1 c arrays pointers

我关注了以下网页:

http://www.1024cores.net/home/lock-free-algorithms/reader-writer-problem/improved-lock-free-seqlock

来源如下:

struct data_t 
{ 
    int seq; // sequence number 
    int data [1024]; // user data 
}; 

struct seqlock_t 
{ 
    data_t* current; 
    data_t pool [16]; // 16 user objects are held 
}; 

seqlock_t sl; 
Run Code Online (Sandbox Code Playgroud)

结构很简单,让我困惑的是:

data_t* d0 = sl.current; // load-consume
int idx = (sl.current - sl.pool + 1) % 16; 
data_t* d = &sl.pool[idx]; 
Run Code Online (Sandbox Code Playgroud)

sl.current是一个指针,sl.pool是什么?当前的池可以实现什么?在c language视图中,我该如何解释这个陈述?

int idx = (sl.current - sl.pool + 1) % 16;
Run Code Online (Sandbox Code Playgroud)

编辑:

感谢所有信息,它帮了很多!!! 在我自己的编码风格中将使用int idx =(sl.current - &[sl.pool [0])+ 1)%16; 现在我知道&(sl.pool [0])与sl.pool相同!我应该弄清楚,下面的例子,我之前读过的,显示指针/数组....

void display(int *p)
{
    int idx ;
    printf("(%d)(%d)\n",*p,p[1]) ;
}
int main()
{
    int i,Arr[10] ;
    for(i=0;i<10;i++)
        Arr[i] = i + 100;
    display(Arr) ;
}
Run Code Online (Sandbox Code Playgroud)

是的,我可以使用显示器(Arr)和显示器(&Arr [0]),它们是一样的〜!!

rcs*_*rcs 6

sl.current是一个指针.sl.pool是一个数组,并通过这样的写作等于&sl.pool[0].所以它指向数组的第一个元素.我们可以做一些指针操作,比如减法,在这种情况下获取一些索引.

我发现这个链接http://www.eskimo.com/~scs/cclass/notes/sx10b.html很容易理解一些指针算法.

  • `sl.pool`是*不是*指针.这是一个数组.他们不是*相同.指针是*保存*地址的变量; 数组是一个有效*是*地址的变量.如果`sl.pool`是一个指针,`sl.pool ++`将是有效的; 事实并非如此. (7认同)