交换两个指针交换数组

ems*_*sch 2 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();
}
Run Code Online (Sandbox Code Playgroud)

Bla*_*iev 15

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

void update_board2(char **board, char **new_board){
  char *temp = *board;
  *board = *new_board;
  *new_board = temp;
  print2();
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 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();
}
Run Code Online (Sandbox Code Playgroud)

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