扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
而形参值的改变不过是值类型数据在内存中的改变,根本没写入到值所对应的地址。实参所以没有受到影响。
成都创新互联公司主要从事成都做网站、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务鄂托克前,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
其实指针也是传值的。传指针是可以修改指向的区域,但对指针的实参没有任何影响的。
否则会发生“类型不匹配”的错误。 函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
传递值的时候不影响实参 传递指针的时候能够影响实参。
主要是通过指针把数组,例如main里面的a的地址传入arry函数,然后在arry函数中用一个兼容类型的指针接收地址,然后就可以再这个指针下的地址操作地址上面的数据了。arry返回的时候也是返回一个指针(地址)。
传递值的时候不影响实参 传递指针的时候能够影响实参。
还有一种是传址,VB默认是传址。传址如果函数里改变了参数的值,那调用函数的地方实参也会跟着改变,传值函数改变其形参值实参不改变。综合来看只有b是传址,所以b在函数体内执行了b=2+1=3,所以输出了这个结果。
形参和实参拥有分别的存储空间,即便是指针传递,改变的也只可能是这个指针变量所指向的内容,而不是指针变量本身的值,也即,如有指针变量p,那对实参的变化,有可能改变的也只是*p的值,而不是p本身的值。
所以改变形参指向者的状态时,实参指针也能看到这种变化.传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会对改变传递前的参数本身。
因此,c语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。
C语言中可变参函数实现,主要通过VA_LIST宏及相关操作的几个宏。涉及宏及说明:所有相关宏均定义在stdarg.h中。va_list: 可变参数列表指针。va_start:获取可变参数列表的第一个参数的地址。
c语言中形参与实参的关系是:形参是实参的值副本。无论参数的类型是什么,传递到子函数中的形参只是实参的值。所以,在改变形参变量自身的值时,是与实参无关的。换句话说,形参的改变不会影响到实参。
在C里面 是无法做到形参改变 实参值同步改变的。只能通过传地址的方式 即参数类型为指针 这样 形参指向空间修改,可以使得实参指向空间同步修改,因为是同一块内存区域。
就比如 void sum(int a, int b ,int *c) { *c = a + b } void main(){ int c; sum(1,2,&c); printf(%d\n,c);} 这里就是在函数内部直接改变了c的值了。
调用函数,只能改变指针指向的内存空间的内容,不能改变实参指针变量的值。我觉得题主对指针变量,还算有一点了解。指针变量,其实也就是一个变量,但它的值是一块内存的地址。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流