嘗試用二級指標 char ** 接收陣列 char (*)[100],編譯報錯 cannot convert parameter 1 from 'char (*)[100]' to 'char **',強制轉型執行時崩潰。
char arr[100] 退化為 char (*)[100](指向陣列的指標),而非 char **(指標的指標)。char ** 假設指向一個指標陣列,每個指標再指向字串;實際陣列是連續記憶體區塊。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getMemBuf(char* &p2) { // C++ 參考語法,C 語言改用 char **p2
char* tmp = (char*)malloc(100);
strcpy(tmp, "aaabbbccc");
p2 = tmp; // 修改呼叫端指標指向
return 0;
}
int main() {
char* buf = NULL;
getMemBuf(buf);
printf("%s\n", buf); // 輸出 aaabbbccc
free(buf);
return 0;
}
int getMemBuf_C(char **p2) {
char *tmp = malloc(100);
strcpy(tmp, "aaabbbccc");
*p2 = tmp; // 解參考賦值
return 0;
}
int main() {
char *buf = NULL;
getMemBuf_C(&buf); // 傳遞指標位址
printf("%s\n", buf);
free(buf);
return 0;
}
char *p(字串指標)、char **p(指標的指標)、char (*p)[N](指向固定長度陣列的指標)。T **(C)或 T* &(C++)。free,避免洩漏。