c语言中的指针怎么隔域传递,关于指针的浅析---------指针的神奇之处(函数传递参数)...

本文探讨了C语言中指针在函数参数传递中的作用,对比了值传递和地址传递的区别。值传递是单向的,不改变原始参数,而地址传递允许直接修改原始数据,提高了效率。通过示例代码展示了swap函数在值传递和指针传递下的不同效果,强调了指针在内存管理和性能优化方面的重要性。
摘要由CSDN通过智能技术生成

关于指针的浅析,神奇的指针传递

往往在其他高级语言中,比如java,.net等中,我们的函数传递参数的时候,都是采用值传递的过程,专业术语叫做:值拷贝,我们传递的参数都不是原来的参数,而是一种拷贝过后的参数,并不会改变原来参数的数值 ,而是在内存的另外一个区域中,做了一个拷贝空间这样的动作,而我们在函数内部同样操作的也就是那一块拷贝过后的数值,但是C语言中的指针,却可以将一个数据的指向,传递进去,这样,我们就不必采用值拷贝的过程,同样,也减少了内存的开销,直接对原来的数据进行操作,大大的提高了函数效率

函数传递参数的方式

值传递

地址传递

值传递

值传递的过程是一种单向的,只能把实参的值单向的传递给形参,传递给形参,传递的过程中不好去影响实际参数

原理:

C语言执行函数的时候,会为每一个函数分配一定的栈空间,而函数中的局部变量都会放入到栈中去,等函数执行完了之后会去自动的释放栈中函数的资源;

地址传递

实参是一块内存中的地址,将这块地址传递给形式参数,函数中就可以通过传入的地址来操作这一块内存空间

注意:

形参指针 本身不会影响到实参指针本身的值的变化,但是通过形参指针可以修改实参数指针所指向的内存单元的数值。

下面我们通过可能算是最简单的例子来看一下数值传递与指针传递之间的区别:

#include

#include

void swap1(int,int);

void swap2(int*,int*);

int main(int argc,char* argv[]){

int num1 = 10;

int num2 = 20;

swap1(num1,num2);

//num1与num2在经过swap1函数过后,回到主函数中,输出它的值

printf("main:num1:%d,num2:%d\n",num1,num2);

int num3 = 30;

int num4 = 40;

//传入地址前,输出原来主函数中的变量的数值

printf("main1:num3:%d,num4:%d\n",num3,num4);

swap2(&num3,&num4);

//输出函数执行完毕之后,回到主函数过后,原来变量的数值

printf("main2:num3:%d,num4:%d\n",num3,num4);

return 0;

}

void swap1(int num1,int num2){

int temp = 0;

temp = num1;

num1 = num2;

num2 = temp;

//输出交换过后的值

printf("swap1:num1:%d,num2:%d\n",num1,num2);

}

void swap2(int *num3,int * num4){

int temp = *num3;

*num3 =*num4;

*num4 =temp;

//输出交换过后的值

printf("swap2:num3:%d,num4:%d\n",*num3,*num4);

}

输出结果为:

swap1:num1:20,num2:10

main:num1:10,num2:20

main1:num3:30,num4:40

swap2:num3:40,num4:30

main2:num3:40,num4:30

由上面的输出结果我们可以看出,swap1是值拷贝的过程,而swap2是函数穿参数的过程,值拷贝不会影响我们原来的参数,而函数传递参数后,在main函数中的变量的值也进行了改变

由此我们可以得出,形参如果是地址的话,我们可以直接去操作这一块内存空间,改变原来内存空间的数值,而值传递却不可以。

在C语言的实战过程中,地址传递无处不在

谢谢!!如有错误。请及时联系博主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值