有人可以解释下面的代码在做什么吗?特别是这种结构出现了几次:

*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寻址的一些位置初始化为它们自己的地址,然后将它们随机地随机排序。

关于c - 对这些指针重新分配感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28669001/

10-11 19:28