对这些指针重新分配感到困惑
Confused about these pointer reassignment
有人可以解释以下代码的作用吗?尤其是这个出现了好几次的结构:
*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;
}
}
此外,我假设指针指向没有 malloc 的 buf 位置是一种不好的做法,所以请不要花时间在这个问题上。
*ptr1 = (char*)ptr1;
给ptr指向的内存位置分配自己的地址。
整个函数将通过 buf
寻址的一些位置初始化为其各自的地址,然后将它们稍微随机地移动。
有人可以解释以下代码的作用吗?尤其是这个出现了好几次的结构:
*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;
}
}
此外,我假设指针指向没有 malloc 的 buf 位置是一种不好的做法,所以请不要花时间在这个问题上。
*ptr1 = (char*)ptr1;
给ptr指向的内存位置分配自己的地址。
整个函数将通过 buf
寻址的一些位置初始化为其各自的地址,然后将它们稍微随机地移动。