我有以下代码,我想让它现在具有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();
}
答案 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返回一个指针,而不是一个字符。