2015-02-23 73 views
0

有人能解释一下下面的代码是干什么的?尤其是这个结构中多次出现:困惑这些指针重新分配

*ptr1 = (char*)ptr1; 

的完整代码:

char * buf; 

void initialize(int set){ 
    int j, k; 
    char ** ptr1, ** ptr2; 
    char * tmp; 

    for (j=0; j<ASSOC; j++){ 
    ptr1 = (char **)&buf[set*LINE_SIZE+j*WAY_SIZE]; // LINE_SIZE=64, WAY_SIZE=256K, ASSOC=16, 15*256K+64 
    *ptr1 = (char*)ptr1; 
    } 

    // permute each set 
    for (j=ASSOC-1; j>=1; j--){ 
    k = rand()%j; 
    ptr1 = (char **)&buf[set*LINE_SIZE+j*WAY_SIZE]; 
    ptr2 = (char **)&buf[set*LINE_SIZE+k*WAY_SIZE]; 
    tmp = *ptr1; 
    *ptr1 = *ptr2; 
    *ptr2 = tmp; 
    } 
} 

另外,我假定指针指向BUF位置,而malloc的是一种不好的做法,所以请不要花时间这个问题。

回答

1
*ptr1 = (char*)ptr1; 

给ptr指向的内存位置分配自己的地址。

全功能初始化通过buf自己各自的地址解决了一些位置,然后洗牌周围有些随意。