C语言不存在按引用传递,一切都是按值传递。
这是由C语言的特点决定的,C语言中不需要按引用传递,因为指针技术完全可以理所当然地实现同样的目的。
而C#和Java
在C中,唯一容易弄混的地方是,传递的参数是数组,如下:
void
或者
void
首先,char
也就是说,实际上只存在一种数组传参形式,就是char
对于数组传参来说,看似是引用传递,但其实是按值传递,怎么讲呢?
调用函数传入char
在被调用函数中,对数组的操作是对s
所以,C语言没有按引用传递方式,因为也没这个必要。
虽然没研究过C#和Java的按引用传递背后的本质,不过,我猜测只是对C的这层概念的进一步封装和抽象,因为C#和Java虽然不允许指针,但其实现机制仍然是指针本身。
----补充一下,c如何实现c++中的引用效果呢?
比如说,链表操作中的插入:int
调用:Insert(list,
那么用C怎么实现呢,这里显然必须修改list,而如果list恰好是空,该如何是好?
两种方案:一是在代码里插入list是否为空的校验,问题是代码不简洁,看上去不美观;第二种我更推荐的是使用指针的指针,函数就变成了:int
调用:Insert(&list,1);//c
原文地址:http://hi.baidu.com/rayord/item/5ab42844b9db82e7bdf451bb