C语言中函数参数的传递的三种形式
2014-03-24 23:59
477 查看
C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。
下面用这三种方式来实现两个变量值的对调。代码一为值传递,代码二为地址传递,代码三为引用传递。
示例代码一(该方法并不能实现两个变量值的对调):
void Exchg1(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
printf("x = %d, y = %d\n", x, y);
}
int main()
{
int a = 4,b = 6;
Exchg1(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出的结果为:
x = 6, y=4.
a = 4, b=6.
在调用函数Exchg1时,进行的只是简单地值传递,只是把a、b的值分别赋值给了x、y,之后在Exchg1函数体内再也没有对a、b进行任何操作了。交换的只是x、y变量的值,对变量a、b的值没有影响。所以调用Exchg1后变量a、b的值并没有交换。
示例代码二:
void Exchg2(int *px, int *py)
{
int temp = *px;
*px = *py;
*py = temp;
printf("*px = %d, *py = %d.\n", *px, *py);
}
int main()
{
int a = 4;
int b = 6;
Exchg2(&a, &b);
printf("a = %d, b = %d.\n", a, b);
return 0;
}
输出的结果为:
*px=6, *py=4.
a=6, b=4.
在调用Exchg2函数时,进行的是地址传递,是把变量a、b的地址分别赋值给了指针变量px、py,这时对*px、*py的操作也就是对a、b变量本身的操作了。所以,交换*px、*py的值也就是交换变量a、b的值,调用Exchg2后,变量a、b的值交换。
示例代码三:
void Exchg3(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
printf("x = %d,y = %d\n", x, y);
}
int main()
{
int a = 4;
int b = 6;
Exchg3(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出的结果为:
x=6, y=4.
a=6, b=4.
在调用Exchg3函数时,进行的是引用传递, 是将a、b分别代替了x、y,也就是x、y分别引用了a、b变量。这样函数里面操作的其实就是实参a、b本身了,所以调用Exchg3后,变量a、b的值交换。
下面用这三种方式来实现两个变量值的对调。代码一为值传递,代码二为地址传递,代码三为引用传递。
示例代码一(该方法并不能实现两个变量值的对调):
void Exchg1(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
printf("x = %d, y = %d\n", x, y);
}
int main()
{
int a = 4,b = 6;
Exchg1(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出的结果为:
x = 6, y=4.
a = 4, b=6.
在调用函数Exchg1时,进行的只是简单地值传递,只是把a、b的值分别赋值给了x、y,之后在Exchg1函数体内再也没有对a、b进行任何操作了。交换的只是x、y变量的值,对变量a、b的值没有影响。所以调用Exchg1后变量a、b的值并没有交换。
示例代码二:
void Exchg2(int *px, int *py)
{
int temp = *px;
*px = *py;
*py = temp;
printf("*px = %d, *py = %d.\n", *px, *py);
}
int main()
{
int a = 4;
int b = 6;
Exchg2(&a, &b);
printf("a = %d, b = %d.\n", a, b);
return 0;
}
输出的结果为:
*px=6, *py=4.
a=6, b=4.
在调用Exchg2函数时,进行的是地址传递,是把变量a、b的地址分别赋值给了指针变量px、py,这时对*px、*py的操作也就是对a、b变量本身的操作了。所以,交换*px、*py的值也就是交换变量a、b的值,调用Exchg2后,变量a、b的值交换。
示例代码三:
void Exchg3(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
printf("x = %d,y = %d\n", x, y);
}
int main()
{
int a = 4;
int b = 6;
Exchg3(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出的结果为:
x=6, y=4.
a=6, b=4.
在调用Exchg3函数时,进行的是引用传递, 是将a、b分别代替了x、y,也就是x、y分别引用了a、b变量。这样函数里面操作的其实就是实参a、b本身了,所以调用Exchg3后,变量a、b的值交换。
相关文章推荐
- 黑马程序员_C语言中函数参数的传递的三种形式
- C语言中函数参数传递的三种方式
- C语言中函数参数传递的三种方式
- 项目1-C语言中函数参数传递的三种方式
- 第二周项目-c语言中函数参数传递的三种方式
- [C]C语言中函数参数传递的三种方式(x,*x,&x)
- 第二周【项目1c/c++语言中函数参数传递的三种形式】
- 第二周项目-c语言中函数参数传递的三种方式
- C语言:函数参数传递的三种方式
- java实现C语言解释器:无参数传递的函数调用的解释和执行
- 【项目1 - C/C++语言中函数参数传递的三种方式】
- 第二周 项目1 C/C++语言中函数参数传递的三种方式
- 黑马程序员---------C语言 关于数组被当作函数参数传递的问题
- 关于C语言中函数调用和参数传递机制的探讨
- 第二周项目1-C/C++语言中函数参数传递的三种方式
- 第二周 项目1-C/C++语言中函数参数传递的三种方式
- 第二周项目1-C/C++语言中函数参数传递的三种方式
- 第二周 项目1 C++中函数参数传递的三种方式
- 项目1-C/C++语言中函数参数传递的三种方式
- 项目1-C/C++语言中函数参数传递的三种方式