交换两个指针交换数组

我有以下代码,我想让它使板现在具有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(); } 

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

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

您需要进行以下更改:

 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(); } 

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

你的主要需要也是固定的

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

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