利用返回值传出参数,地址传递,值传递,使用回调函数赋值几个例程。
#include
#include
#include
#include
#include
#include
typedef struct person
{
char name[64];
int age;
} pPerson;
//利用返回值传出参数,需要在被调函数分配空间
pPerson * func1()
{
pPerson * p = malloc(sizeof(pPerson));
strcpy(p->name, “aaa”);
p->age = 10;
return p;
}
void test01()
{
pPerson * p, p1;
p = func1();
printf(“name: %s, age:%d\n”,p->name, p->age);
free§;
}
//地址传递,需要在被调函数分配空间
void func2(pPerson ** p )
{
pPerson *p1 = malloc(sizeof(pPerson));
strcpy(p1->name, “aaa”);
p1->age = 10;
*p = p1;
}
void test02()
{
pPerson * p;
func2(&p);
printf(“name: %s, age:%d\n”,p->name, p->age);
free§;
}
//值传递,需要在主调函数分配空间
void func3(pPerson * p)
{
strcpy(p->name, “aaa”);
p->age = 10;
}
void test03()
{
pPerson * p= malloc(sizeof(pPerson));
func3§;
printf(“name: %s, age:%d\n”,p->name, p->age);
free§;
}
//使用回调函数赋值
void setname(pPerson * p)
{
strcpy(p->name, “aaa”);
p->age = 10;
}
void func4(pPerson * p,void (*MYFUNC)(pPerson *))
{
MYFUNC§;
}
void test04()
{
pPerson * p= malloc(sizeof(pPerson));
func4(p,setname);
printf(“name: %s, age:%d\n”,p->name, p->age);
free§;
}
void main(int * argc, char * agrv[])
{
test01();
test02();
test03();
test04();
}