本文目录一览:
1、c语言值传递
2、c语言中的值传递是怎么回事?
3、在c语言编程中,传值方式和传引用方式之间有什么区别?
4、c语言的传值与传指针的问题
c语言值传递
在main
函数中输出sizeof(a)
结果是数组a
的大小,所以结果为6;
而在函数MatchingBrackets
中,你把数组a
的地址传递给了形参b
,此时的形参是一个指针变量,所以你用sizeof(b)
测的是你所使用的环境中指针变量所占的内存空间大小,而不是测数组a
的大小。因此结果为4。
c语言中的值传递是怎么回事?
实参的值传给了形参,形参可以看着是被调函数中的局部变量。被调函数可以有返回值也可以没有,有返回值用return
返回。
例如:
int fun(int a, int b) {
int c;
c = a + b;
return c;
}
主函数调用:
int a, b, c;
a = 1, b = 2;
c = fun(a, b);
没有返回值的函数通常形参都是指针变量,那样可以直接改变变量的值,例如:
fun(int *a) {
*a = 5;
}
主函数调用:
int b = 1;
fun(&b);
这里调用fun
后,b
的值就变为5了。而如果你的函数是fun(int a)
这样,b
的值是不会变化的,这需要你去理解指针。
在c语言编程中,传值方式和传引用方式之间有什么区别?
在C语言中,并没有引用的概念,这个是C的概念。 在C的函数参数中,有两种形式:
TYPE &var
的形式,称为传引用方式;TYPE var
的形式,称为传值。 二者的区别为:
- 传引用时,形参和实参是同一个变量,即使用相同的内存空间,二者有相同的地址。而传值时二者地址不同;
- 传引用时,由于没有新建变量,所以对于类对象参数,不会产生构造和析构。而如果是传值调用,调用时会进行构造,退出函数时会进行析构;
- 由于传引用使用的是原本实参的地址,所以对引用参数值的修改,会在退出函数后体现在主调函数中,而传值调用对参数的修改不会影响到主调函数。
c语言的传值与传指针的问题
C语言中指针即地址,地址的传值可以引起参数的变化。
比如:
x
, y
是取这两个变量的地址,作用空间在main
函数里。然后函数调用把这两个变量的地址传递到函数myadd
中,在函数中的*a
和*b
分别是引用地址指向的变量值,等于是取到了x
, y
本身的值。在myadd
中直接操作*a
可以改变x
的值。
通俗来说因为&x
, &y
表示的是x
, y
的地址。所以传递的是地址。意思就是说,函数可以通过地址引用变量。