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

一:函数的副本机制

总结:


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");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值