c语言中改变被调函数 c语言改变函数参数的值

C语言问题:能否改变被调函数中实参的内容

void func(int a){a=100;}

成都创新互联专注于平阴企业网站建设,响应式网站,商城开发。平阴网站建设公司,为平阴等地区提供建站服务。全流程按需网站策划,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

int a=10;

func(a);

printf("a=%d",a); // 仍然显示 a=10, 因为整型参数a在func()中是按值传递的, 也就是说func()仅使用a的值, 而对存储a的内存地址不加修改;

void func(int* a){ *a=100;}

int a=10;

func(a);

printf("a=%d",a); // 显示 a=100, 因为整型参数指针a在func()中是按地址传递的, 也就是说func()使用a的存储地址, 直接修改其内容.

数组参数与指针参数相同, 均按地址传递.

C语言中到底如何通过地址值的传送在被调函数中直接改变调用函数中变量的值,请解释详细一点

这个就是2种函数调用方式中的地址传递调用方式(另一种是传值方式)。

下面通过具体的实例来说明传地址调用方式:

#includestdio.h

void swap(int *p1, int *p2)  // 交换两个整数——交换形参值(地址)

{  // 实际上是改变p1与p2所指向的地址

int *temp;

temp = p1;

p1 = p2;

p2 = temp;

printf("交换后:x=%d   y=%d\n", *p1, *p2);

}

void main()

{

int x, y;

scanf("%d%d", x, y);

swap(x, y);  // 调用swap函数的时候,是将变量x和y的地址传递进去的,也就是使形参p1和p2分别指向变量x和y的地址,改变的实际上还是x和y的值,只不过是通过地址的变换来实现的

printf("交换前:x=%d   y=%d\n", x, y);

}

C语言问题:能否改变被调函数中实参的内容?

int main(){

int a=0,b=1;

swap(a,b);

}

void swap(int a,int b);//实际是不能交换a和b的值的,是值传递

void f(int a[],int n){//这里a是数组首地址,所以可以更改数组里的值

}


名称栏目:c语言中改变被调函数 c语言改变函数参数的值
转载来于:http://pwwzsj.com/article/dopeccp.html