猛然间玩了1年多的VB,倒是把C的内容丢了不少,很多基本功都生疏了。最近优快云上看了个帖子,涉及到形参实参的问题,竟然把我都给搞糊涂了。为了加深对编程语言概念的印象,特利用VB与C中对形参实参调用的不同点,来巩固一下基本功。本文档所述均为我自己的体会,许多内容和说法并非教材定义,故也许与标准的定义有出入,只要不影响理解就行。
VB与C编译方式的不同导致对函数调用时形参实参定义方式有很大不同(其实是完全不同,并且没有可比性)。
在VB中,区别形参和实参的办法很简单,只要看参数定义前边有没有 ByVal 标识符。没有ByVal标识的即为实参,有标识的为形参。
如:Function MyFun(Long a, ByVal Long b)
其中,参数 a 为实参,b则为形参。
但是在C中,形参和实参的操作就不这么简单了。C对函数参数的调用一直是以“拷贝副本”(姑且这么说)的方式进行的,无论你怎样去设置函数参数,在函数内部使用的参数都是调用前原参数的一个副本。换句话说,原参数在被函数调用时,都先将此刻的原参数值拷贝给函数中对应的新参数,函数内部只使用新参数进行操作,即使新参数的值被改变了,也不会影响原参数。再换句话说,C中函数总是以形参的方式传递参数的。
那么,在C中如何实现实参呢?也就是说如何得到函数对参数的处理结果呢?这就靠C中独特的指针概念来解决了。所谓指针就是指向内存某块区域的标记。倘若我们定义一个int类型变量和一个指针,并将指针指向一个int类型变量的内存,即
int a;
int *q=&a; //此时 q为变量a的内存的地址。
之后,我们在一个函数中想以实参的方式调用变量a,那么我们可以将变量a的地址传递给函数,即
通过,上边的例子,我们了解到C中函数如何引用参数的,并利用指针实现了实参的传递。
下边引用优快云上一个哥们如何错误的使用实参的例子,并给出一个正确的调用方式,以求真理。
上边2个例子,很好的诠释了C函数如何引用参数的和如何处理形参与实参。
理解这个例子的关键就是那个 int **p
至于怎么理解,我不说了,反正我会