您的位置:首页 > 编程语言 > C语言/C++

指针作为函数参数

2017-10-10 21:13 92 查看
临近毕业,还有找工作的事情,繁忙之际还是坚持看一下C语言的知识,重点的地方或者不清楚的地方还是要记录一下。

本章以指针作为函数传参来说一下学习心得,大部分内容源自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的值不会回传给实参。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针