1. 程式人生 > >c語言中的二級指標做函式引數

c語言中的二級指標做函式引數

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.記憶體分割槽圖: