用指针方式实现实参随形参发生改变。

Posted 两片空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用指针方式实现实参随形参发生改变。相关的知识,希望对你有一定的参考价值。

一:形参和实参

1.什么是形参和实参。

  当调用一个函数时,可以不向函数传入参数或者向函数里传入参数。当向函数里传入参数时,调用函数时传入的参数为实参,在函数里传入的参数为形参。

int met(int b){
	b++;
	return 0;
}
int main(){
	int a = 1;
	met(a);
	return 0;
}

例如上述程序,main函数里的a为实参,函数met里的b为形参。

2.为什么当形参改变时实参不会改变

当函数调用时,形参用来接收实参,相当于实参的拷贝,然后在计算机内存中分配地址。实际上形参的地址与实参的地址不相同,如下。所以当形参发生改变时,实参并不会发生改变。

二:如何实现

当我们调用函数时,当我们用函数的方法写代码,例如比大小,做加减等代码时,当我们调用的函数中的形参发生变化时,函数中的实参并未发生变化,那如何实现形参发生变化,实参也发生变化呢?

用指针来实现。

例如:

#include<stdio.h>

int met(int *b){
	(*b)++;
	return 0;
}
int main(){
	int a = 1;
	printf("%d\\n", a);
	met(&a);
	printf("%d\\n", a);
	return 0;
}

输出

1
2

上述代码中&a代表a的地址,met()函数中int *b,b为指针变量,并且b=&a,*b=a,这里并不只是代表值相等,是b完全就是&a,*b完全就是a。

当向调用函数传入变量的地址,调用函数定义一个指针变量接受时,就实现了当形参发生变化时,实参也相应发生了变化。

注意点:在上述代码中必须是(*b)++,不能是*b++,指针做运算时最好加上()作为一个整体。

以上是关于用指针方式实现实参随形参发生改变。的主要内容,如果未能解决你的问题,请参考以下文章

函数形参为指针与非指针的区别

C++,const型指针变量做形参实参变量的问题

char* & 与 char*

用指针引用或直接传值来分配内存

当需要一个形式参数直接改变对应实参的值时,该形式参数应说明为啥参数?

当用数组名作形参时,形参数组改变可使实参数组随之改变 . 这句话哪里错了 求详细解答