关于函数数的参数传递,变量以及指针,容易混淆
下面通过代码来进行了解学习。
#include<stdio.h>
#include<Windows.h>
void Clm(int &d, int *&p)
{
printf("Clm(int &d, int *&p),int &d表示传入d的值,int *&p传入的是p的值也就是a的地址");
printf("传出d传进的值:%d\n", d);
d = 888;
printf("传出d修改的值:%d\n\n", d);
printf("&p 传出p的自身地址:\t\t\t%d\n", &p);
printf("*&p 传出p的自身值(p中存储的为a的地址):%p\n", *&p);
printf("p 传出赋值后p的地址(即是a的地址):\t%d\n", p);
printf("*p 传出p的值(即是a的值):\t\t%d\n", *p);
printf("&*p 传出p的值的地址:\t\t\t%p\n", &*p);
}
int main()
{
int a, d;
a = 999;
d = 0;
int *p=0;
printf("p 未赋值前p的值:%d\n", p);
printf("&p 未赋值前p的地址:%d\n", &p);
printf("*&p 未赋值前指向p的地址的值:%d\n\n", *&p);
p = &a;//将a的地址赋给p
printf("&a 传出a的地址:%p\n", &a);
printf("a 传出a的值:%d\n\n", a);
printf("可以理解为p将地址实体化,p就是a的地址值\n\n");
printf("p 赋值后传出p的值(此时为a的地址值):%d\n", p);
printf("*p 赋值后传出指向p存储的地址值的值(此时为a的值):%d\n", *p);
printf("&p 传出p身的地址:%p\n\n", &p);
printf("-------------进入函数----------\n");
Clm(d, p);
printf("--------------出函数-----------\n");
printf("\nd传出d修改的值:%d\n\n", d);
system("Pause");
return 0;
}