值传递&地址传递的使用情形

C语言中什么时候使用值传递什么时候使用地址传递?使用两者的时候有什么条件么?有什么需求的时候要使用地址传递啊?

如果值只需要单向传递,那用值参即可
如果需要通过参数对传递变量值进行修改,那用地址传递
另外,如果你要传递的变量本身就是指针类型或者数组等,那么自然也是地址传递。但这个地址传递和普通变量的地址传递的意义还是有差异的。普通变量用地址传递,一般就是想通过函数修改传递变量的值

值传递的最大的特点就是单向传递,即主调函数被调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。
所谓的地址传递,就是函数的参数是数组名或者指针,传递的是数组的首地址或指针的值,而形参接收到的是地址,即指向实参的存储单元,形参和实参占用相同的存储单元,即形参和实参是相同的。形参的变化也就是实参的变化。

其实实参形参之间的传值,和两个变量之间赋值是一回事
int a=1,b=2;
a=b;
此时就是值传递,并且改变a的值并不会改变b的值
而int *c=&b,此时指针c指向的是b的地址,改变*c其实就是在改变b的值,但是改变c的地址并不会改变b的地址
-=-=-=-
如果你的函数里面只需要用到参数的值,而并不想改变它,那就用值传递。比如判断一个数是不是素数,传入一个n返回n的阶乘,都是只需要它的值而并不想改变它。
而如果你需要改变传入的参数的值,那就应该传入地址,比如函数的目的是删除数组中的元素,那么跟数组一起传入的数组长度这个参数就应该一起改变,否则你需要额外return回新的长度

值传递:形参开辟内存空间,与形参不同的地址,不能改变值。(变量名的访问)

地址传递:形参不开辟内存空间,与形参相同的地址,能改变值。(地址的访问)

引用传递:形参开辟内存空间,与形参相同的地址,能改变值。