您的位置:首页 > 其它

函数的副本机制 深化结构体数组作为函数的参数

2017-01-06 23:14 246 查看
一:函数的副本机制

总结:



1:函数传参没有改变main函数里面的值

//函数的副本机制,是每个形式参数,都会新开辟一片内存新建一个变量,容纳传入过来的实际参数的值,

//设计一函数改变num

void change(int num)//函数没有改变成功,

{
num = 20;
printf("changenum=%x\n",&num);//不同的地址,不同的变量

}

void main()

{
int num = 10;

printf("num=%d\n",num);

printf("mainnum%p\n",&num);//不同的地址,不同的变量
//num = 11;//赋值改变了num
change(num);
printf("num=%d\n",num);

system("pause");

}

2:一定要改变main函数里面num的值,用地址



//一定要改变main函数里面num的值,用地址

/*需要传入num的地址,用什么类型的变量来容纳一个变量的地址,我们用什么样的方式

来容纳一个变量的地址,我们用什么样的形式参数来接收一个变量的地址,其实是一个指针int *p,函数内部改变一个外部变量,需要传入地址,如何执行呢》新开辟一段内存,

新建一个指针变量,容纳船渡过的的&num地址,副本机制仍然有效,int *p就是新建的变量。*/

void change2(int *p)//传入地址,int *p=&num

{
*p = 20;//对*p进行赋值,根据地址取出内容进行赋值

}

void main()

{
int num = 10;

printf("num=%d\n",num);

printf("mainnum%p\n",&num);//不同的地址,不同的变量

change2(&num);//传入地址

printf("num=%d\n",num);

system("pause");

}

3:地址调用也是通过副本机制



void change2(int *p)//p是一副本,新建一个变量来容纳传递过的

{
*p = 20;//对*p进行赋值,根据地址取出内容进行赋值
printf("change2 &p=%p\n",&p);//地址不一样,因为函数新建了一变量
p = NULL;//赋值为空指针
printf("change2 p=%p\n",p);

}

void main()

{
int num = 10;
int *p = #//让一个指针存储num的地址

printf("main num=%d\n",num);

printf("main &num=%p\n",p);//不同的地址,不同的变量

printf("main &p=%p\n", &p);

change2(p);//传入num的地址

printf("main p=%p\n",p);

printf("num=%d\n",num);

system("pause");

}

通过以上总结:



二:函数的参数(结构体数组范例)没有看完

1:结构体数组作为函数参数

struct csdn

{
char user[40];
char password[40];
char email[40];

};

//如何写一函数对这个数组进行查找,第一个参数传递一个数组,第二个参数传递一个字符串,

void find(struct csdn cdata[5],char *str)

{

}

void main()

{
//创建一结构体数组并初始化,有5个元素
struct csdn cdata[5] = { 
{"huwei","198205","978920100@qq.com"},
{"hu", "198205", "978930100@qq.com" },
{"huw", "198209", "978940100@qq.com"},
{"huwe", "198203", "978950100@qq.com"},
{"huweio", "198204", "978960100@qq.com"},

};
//显示:
for (int i = 0; i < 5;i++)
{
printf("%s %s %s\n",cdata[i].user,cdata[i].password,cdata[i].email);//打印结构体数据
}

system("pause");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐