1.例程:
/下面是使用基本类型,指针,引用,指针的指针,指针的引用作为函数参数的几个例程/
// 值拷贝
int add10(int a)
{
a += 10;
return a;
}
// 指针传参,是一种地址拷贝
void add101(int *a)
{
// int * b = NULL;
// b = a;
// *b +=10;
*a += 10;
}
// 引用传参,也是一种地址拷贝
void add102(int &b)
{
b += 10;
}
// 指针swap
void swap01(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
// 引用swap
void swap02(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
// 给结构体分配空间并赋值返回
struct teacher
{
string name;
int age;
};
// 传入结构体指针的地址,然后分配空间赋值
int allocation002(teacher **te) // te指向(*te), (*te)指向结构体对象。**标识指向指针的指针。
{
teacher *p = (teacher *)malloc(sizeof(teacher));
p->age = 20;
p->name = "laia";
*te = p;
cout << "————在allocation002中使用(**te).name,(**te).age打印结构体信息—————" << endl;
cout << "teacher.name=" << (**te).name << " teacher.age=" << (**te).age << endl << endl;
return 0;
}
// 传入结构体指针的地址,释放结构体空间,然后把指针赋值为空
void freeAllocation002(teacher **te) // te指向(*te), (*te)指向结构体对象
{
if (te == NULL)
{
return;
}
// teacher *tp = *te;
// if(tp != NULL) {
// free(tp);
// *te = NULL;
// }
if (*te != NULL)
{
free(*te); // 把(*te)指向的结构体内存空间释放掉,free()接收的是指针类型
*te = NULL;
}
}
// 传入结构体指针的引用,给结构体分配空间然后赋值
int allocation003(teacher *&te) // 使用指针的引用类型接收结构体的指针
{
te = (teacher *)malloc(sizeof(teacher)); // te是指针的引用,可以当成指针类型
te->age = 18;
te->name = "kuailaia";
return 0;
}
// 传入结构体指针的引用,释放结构体空间,然后把指针赋值为空
void freeAllocation003(teacher *&te) // 使用指针的引用类型接收结构体的指针
{
if (te != NULL)
{
free(te); // te是指针的引用,可以当成指针类型
te = NULL;
}
}
void test06()
{
int a = 10;
int b = 20;
cout << “a=” << a << endl;
a = add10(a);
cout << “调用add10(int a)后 a=” << a << endl;
add101(&a);
cout << “调用add101(int * a)后 a=” << a << endl;
add102(a);
cout << “调用add102(int & a)后 a=” << a << endl;
cout << “———————————指针swap—————————————” << endl;
cout << “swap01前 a=” << a << " b=" << b << endl;
swap01(&a, &b);
cout << “swap01后 a=” << a << " b=" << b << endl;
cout << “———————————引用swap—————————————” << endl;
cout << “swap01前 a=” << a << " b=" << b << endl;
swap02(a, b);
cout << “swap01后 a=” << a << " b=" << b << endl;
cout << "———————————给结构体分配空间并赋值返回—————————————" << endl;
teacher *p = NULL;
// allocation002(&p); //取结构体指针p的地址,然后匿名传入函数参数,当然也可以写成下面两行
teacher **pp = &p;
allocation002(pp);
cout << "———————————调用allocation002(&te)后te的值—————————————" << endl;
cout << "teacher.name=" << p->name << " teacher.age=" << p->age << endl << endl;
freeAllocation002(&p); // 传入结构体指针的地址
teacher *te3 = NULL;
cout << "———————————调用allocation003(&te)后te的值—————————————" << endl;
allocation003(te3); // 把指针作为参数传入,allocation003()使用指针的引用类型接收结构体的指针
cout << "teacher.name=" << te3->name << " teacher.age=" << te3->age << endl << endl;
freeAllocation003(te3);
}
extern “C” void app_main(void)
{
test06();
}