**
函数传参必定要形成临时变量*
传参又分为传值传参和传址传参
传值传参:形参对实参值的临时拷贝,实质上只是发生交换的只是这个临时变量,实参值并没有变化
传址传参:形参指针指向实参的地址,传地址后,解引用后交换地址里的内容,实参完成了交换
//传值传参
int swap(int x, int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
//传址传参
int swap2(int *px, int *py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int a = 100;
int b = 200;
swap(a, b);
printf("a=%d\n,b=%d\n", a, b);//100 200 只是临时变量(形参)交换了数值,实参并没有交换
swap2(&a, &b);
printf("a=%d\n,b=%d\n", a, b);//200 100 直接传地址,解引用后交换地址里的内容,实参完成了交换
return 0;
}
数组传参问题
数组作为参数传给函数时,数组会降维成指针(指向其内部元素类型的指针)
例子:二维数组传参时,降维成指向一维数组的指针。
//传参时要想知道数组的所有元素必须知道数组首元素的地址和数组的长度大小
void display(int *p, int sz)
{
int i = 0;
printf("数组为:\n");
for (i = 0; i < sz; i++)
printf("%d ", p[i]);
printf("\n");
}
int main()
{
int arr[] = { 1, 3, 5, 7, 1, 8, 3, 5 };
int sz = sizeof(arr) / sizeof(arr[0]);
display(arr, sz)
return 0;
}