C 語言無引用機制,若需在函數內修改指針變量本身的值(即指向的地址),必須傳遞指針的指針——二級指標。C++ 可用引用替代。
嘗試用一級指標交換兩個整數變量的地址:
void swap(int *a, int *b) {
int *tmp = a; a = b; b = tmp; // 僅交換局部副本,外部無影響
}
參數傳遞本質是值傳遞,函數內修改的是副本,返回後原指針變量不變。
void memorylocate(char **ptr) {
*ptr = (char *)malloc(10 * sizeof(char)); // 修改實參指向的地址
}
int main() {
char *buffer;
memorylocate(&buffer); // 傳遞一級指標的地址
strcpy(buffer, "12345");
printf("buffer %s\n", buffer);
return 0;
}
char **ptr 接收 &buffer,解引用 *ptr 即可修改 buffer 本身的值。
int **arr = malloc(rows * sizeof(int*)),每行再 malloc。總結:當「想改變指針的值」時,考慮二級指標。