2015-02-23 89 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自己各自的地址解決了一些位置,然後洗牌周圍有些隨意。