交换两个指针交换数组

时间:2012-11-06 07:50:51

标签: c pointers runtime-error

我有以下代码,我想让它现在具有new_board的值,反之亦然。因为它们都是指针,我认为我可以交换它们指向的地址。当我在print2()中打印时,地址被适当地交换。但是,当我在print1()中打印时,地址以某种方式换回,这对我没有任何意义。此外,如果我在print2()处打印出电路板中的值,它们也是正确的。

main(){
  char *new_board = (char *)malloc(sizeof(char) * rows * cols );
  char *board = (char *)malloc(sizeof(char) * rows * cols );
  update_board2(board, new_board, rows, cols);
  print1();
}

void update_board2(char *board, char *new_board, int rows, int cols){
  //do a bunch of stuff
  char *temp = board;
  board = new_board;
  new_board = temp;
  print2();
}

3 个答案:

答案 0 :(得分:15)

如果要更改指针本身的值,则函数update_board2必须接受双指针。否则,指针会在函数中被复制,并且您只交换这些临时副本而不是调用者已经传递的实际指针:

void update_board2(char **board, char **new_board){
  char *temp = *board;
  *board = *new_board;
  *new_board = temp;
  print2();
}

答案 1 :(得分:6)

您需要进行以下更改:

update_board2(&board, &new_board, rows, cols);

void update_board2(char **board, char **new_board, int rows, int cols){
  //do a bunch of stuff
  char *temp = *board;
  *board = *new_board;
  *new_board = temp;
  print2();
}

在这种情况下,指针将被正确交换。

答案 2 :(得分:2)

您的主要需要修复

char * new_board = (char *)malloc(sizeof(char) * rows * cols );
char * board = (char *)malloc(sizeof(char) * rows * cols );

malloc返回一个指针,而不是一个字符。