指针作为函数参数
2017-10-10 21:13
92 查看
临近毕业,还有找工作的事情,繁忙之际还是坚持看一下C语言的知识,重点的地方或者不清楚的地方还是要记录一下。
本章以指针作为函数传参来说一下学习心得,大部分内容源自C语言程序设计课本。
首先从C语言中函数参数的传递方向说起,大家都知道,C语言中函数参数的传递方向是单向的,只能由主调函数的实参传递到被调函数的形参,而形参的值不能传递给实参。但是依据传送的内容可以将函数参数分为值型参数和指针型参数。通常来说,值型参数用来传值,而指针型参数用来传地址。可以看出,指针型参变量得到的是主调函数中某个变量的地址,因此可以通过间接存取运算,操作主调函数中的变量,从而将指针型形参的指向域扩大到主调函数,达到与主调函数双向交换数据的目的。这样,指针形参数的作用完全可以替代全局变量,而且可以弥补全局变量的不足之处。
下面举三个例子来说明,让大家更清楚的理解指针型变量的存在意义。
void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(x,y);
printf(“1:x=%d y=%d\n”, x, y);
}
void swap(int x,int y)
{
int temp;
printf(“子函数中交换前:x=%d,y=%d\n”, x, y);
temp = x; x = y; y = temp;
printf(“子函数中交换后:x=%d,y=%d\n”, x, y);
}
结果如图:
void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(&x,&y);
printf(“2:x=%d y=%d\n”, x, y);
}
void swap(int *x,int *y)
{
int temp;
printf(“子函数中交换前:*x=%d,*y=%d\n”, *x, *y);
temp = *x; *x = *y; *y = temp;
printf(“子函数中交换后:*x=%d,*y=%d\n”, *x, *y);
}
运行结果:
void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(&x,&y);
printf(“2:x=%d y=%d\n”, x, y);
}
void swap(int *x,int *y)
{
int *temp;
printf(“子函数中交换前:*x=%d,*y=%d\n”, *x, *y);
temp = x; x = y; y = temp;
printf(“子函数中交换后:*x=%d,*y=%d\n”, *x, *y);
}
从这里可以得到如下结论:
1.例1说明函数间参数只能单向传递。
2.例2说明当指针变量作为函数传递参数时,形参和实参形参和实参同时指向同一内存地址。
3.虽然交换了形参x和y的指向,但是指针型参数也必须遵循单向传递规则,x和y的值不会回传给实参。
本章以指针作为函数传参来说一下学习心得,大部分内容源自C语言程序设计课本。
首先从C语言中函数参数的传递方向说起,大家都知道,C语言中函数参数的传递方向是单向的,只能由主调函数的实参传递到被调函数的形参,而形参的值不能传递给实参。但是依据传送的内容可以将函数参数分为值型参数和指针型参数。通常来说,值型参数用来传值,而指针型参数用来传地址。可以看出,指针型参变量得到的是主调函数中某个变量的地址,因此可以通过间接存取运算,操作主调函数中的变量,从而将指针型形参的指向域扩大到主调函数,达到与主调函数双向交换数据的目的。这样,指针形参数的作用完全可以替代全局变量,而且可以弥补全局变量的不足之处。
下面举三个例子来说明,让大家更清楚的理解指针型变量的存在意义。
例1
void swap(int x, int y);void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(x,y);
printf(“1:x=%d y=%d\n”, x, y);
}
void swap(int x,int y)
{
int temp;
printf(“子函数中交换前:x=%d,y=%d\n”, x, y);
temp = x; x = y; y = temp;
printf(“子函数中交换后:x=%d,y=%d\n”, x, y);
}
结果如图:
例2
void swap(int *x, int *y);void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(&x,&y);
printf(“2:x=%d y=%d\n”, x, y);
}
void swap(int *x,int *y)
{
int temp;
printf(“子函数中交换前:*x=%d,*y=%d\n”, *x, *y);
temp = *x; *x = *y; *y = temp;
printf(“子函数中交换后:*x=%d,*y=%d\n”, *x, *y);
}
运行结果:
例3
void swap(int *x, int *y);void main()
{
int x, y;
scanf_s(“%d%d”,&x,&y);
printf(“1:x=%d y=%d\n”, x, y);
swap(&x,&y);
printf(“2:x=%d y=%d\n”, x, y);
}
void swap(int *x,int *y)
{
int *temp;
printf(“子函数中交换前:*x=%d,*y=%d\n”, *x, *y);
temp = x; x = y; y = temp;
printf(“子函数中交换后:*x=%d,*y=%d\n”, *x, *y);
}
从这里可以得到如下结论:
1.例1说明函数间参数只能单向传递。
2.例2说明当指针变量作为函数传递参数时,形参和实参形参和实参同时指向同一内存地址。
3.虽然交换了形参x和y的指向,但是指针型参数也必须遵循单向传递规则,x和y的值不会回传给实参。
相关文章推荐
- 指针作为函数参数返回地址(值)
- 078.Char Pointer Arg 字符指针作为函数参数
- 如何理解数组作为函数参数时,数组名就是指针?
- C基础--函数指针作为函数的参数
- 当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针!
- c++之指针作为函数参数传递的问题
- 请问引用和指针都可以作为函数参数的区别?
- C++指针作为函数参数的问题
- 指针类型作为成员函数的参数
- 指针类型作为成员函数的参数
- 指针类型作为成员函数的参数
- 数组名作为函数参数时会退化为指针
- 指针作为函数参数(处理数组的四种方式)
- c++之指针作为函数参数传递的问题
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数
- 指针作为函数参数传递
- 函数指针作为某个函数的参数及定义函数指针
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- C++中将数组的指针作为函数参数