c語言中的二級指標做函式引數
阿新 • • 發佈:2019-02-14
1.用指標做函式引數申請動態記憶體的問題 //如果函式引數是指標,不能用一級指標做函式引數實現申請動態記憶體 void getMemory(char *p, int num) { p = (char *)malloc(sizeof(char)*num); } void main() { char *str = NULL; getMemory(str, 20); strcpy(str, "code"); cout << str; system("pause"); }//出錯 然而 //用二級指標為指標申請記憶體,用二級指標做函式引數可以申請成功 void getMemory1(char **p, int num) { *p = (char *)malloc(sizeof(char)*num); } void main() { char *str = NULL; getMemory(&str); strcpy(str, "code"); cout << str; system("pause"); } 2.二級指標做函式引數簡介修改變數的值 #include<iostream> using namespace std; struct Teacher { char name[20]; int age; }; int getTeacher(Teacher **p) { Teacher *tmp = NULL; if (p == NULL) { return -1; } if (tmp == NULL) { return -2; } tmp->age = 23; *p = tmp;//p是實參地址,*p間接修改實參的值 //用二級指標修改一級指標的值,用一級指標修改零級指標的值 } void FreeTeacher(Teacher *p) { if (p == NULL) { return; } free(p); } int main() { Teacher *pt = NULL; getTeacher(&pt); cout << pt->age << endl; FreeTeacher(pt); system("pause"); return 0; }
3.記憶體分割槽圖: