c语言指针传递和值传递的区别,c中函数参数的传递方式中引用传递和值传递的区别指针和引用

1 , c中函数参数的传递方式中引用传递和值传递的区别指针和引用引用传递,给的是指针,是值的地址值传递,给的是值,是地址的内容 。指针和引用,也就是用法的侧重点和叫法不一样 。在参数中,传递一个指针,就是引用传递 。你的a值没有变啊 , 你只是把a+1传进去了,然后又反回了a,a就没有经过运算,要想变a的值,可以用a++;或者a=a+1;
2,c语言指针问题 怎么区分是传值还是传地址 一般指针不都是传地址改变把函数在main()中拆开看:void main() int m=3; //f(&m);下面拆开替换 int *s=&m; //s指向m但什么都没做 s=&k; //然后就指向k了 *s=7; } printf(/*...*/);}c语言中指针即地址,地址的传值可以引起参数的变化 。比如:&x, &y是取这两个变量的地址,作用空间在main函数里 。然后函数调用把这两个变量的地址传递到函数myadd中,在函数中的*a和*b分别是引用地址指向的变量值,等于是取到了x , y本身的值 。在myadd中直接操作*a可以改变x的值 。通俗来说因为&x,&y表示的是x , y的地址 。所以传递的是地址 。意思就是说 , 函数可以通过地址引用变量 。
3,在C中值传递和指针传递有什么不同啊都会创建拷贝 只不过是如果想操作影响到参数,需要使用地址传递 我可以解释一下: 如 swap(int a,int b)实际上,参数会创建副本,随便起个名字 int _a= a, int _b = b; 所有的操作都是针对 _a, _b,并不会影响到a,b 如果写成 swap(int *a,int *b)实际上,参数会创建副本,随便起个名字 int*_a= a, int*_b = b; _a指向的是a的地址,_b指向的是b的地址 所以对*_a *_b的操作,就是对 a,b地址内容的修改,就会影响到a,b 其实在c++中,引用更为方便 只要 swap(int &a, intb) 就能将参数改变传出来了,因为它不被创建副本值传递是单向的 只能传出值 而不能传回来指针传递可以理解为“双向的” 但其实质是空间共享 共同使用同一个地址值传递在传递参数的时候,是传的一个参数的拷贝 。而指针传递,传递的是参数的地址 。而非参数的一份拷贝举个例子:void swap(int a, int b)//值传递方式参数会创建副本,不能达到改变参数的目的,同时如果参数是大数据结构,创建副本会影响效率int t = a;a = b;b = t;}void swap(int &a, int &b)//引用参数,不会产生副本,直接修改了实参,效率高int t = a;a = b;b = t;}void swap(int *a, int *b)//同样也创建副本,但是也能改变实参,同时如果参数是大数据结构,效率较值传递高int t = *a;*a = *b;*b = t;}指针传递原值改变,值传递原值不变 。【c语言指针传递和值传递的区别,c中函数参数的传递方式中引用传递和值传递的区别指针和引用】
4,c语言 是传值 还是传址的用指针的话就是传址,其它的都是传值 。传址的好处是可以使程序的时间使用率更高 。实际上就是用空间换时间 。C语言中函数的形参都是传值的指针传的是指针值(也就是说.你无法通过调用函数来改变形参指针的值..这时可以考虑用双指针了)没有什么"不用指针也可完成指针程序"c语言的许多操作本就基于指针的操作如:数组也是用指针来操作的传值和传地址的区别在于函数是否对形参分配内存 。C的函数对简单变量和指针形参分配内存,所以是传值 。但数组作参数,因为数组对内存要求比较苛刻并消耗大量内存,所以不再分配空间,而传地址 。数组传地址的例子:#include#include void f (int a[3]){a[0] = 1; a[1] = 2; a[2] = 3;} void main() { int a[3]; (void) f(a); printf("%d %d %d\n",a[0],a[1],a[2]); } 正因为传地址,所以能把函数运算结果带回主程序 。我估计,对于结构也是传地址 。其实你的说法对错各一半吧,不用指针的确可以完成有指针的程序 。但是指针的用法并不在于此,在函数的调用过程中分两类,一是以值传递,二是以地阯传递(又分为指针传递和数组名传递) , 其实两者是有区别的,具体的区别给你举个例子吧1.首先看以值传递void fun(int a,int b,int c)a=456;b=567;c=678;}void main()int x=10,y=20,z=30;fun(x,y,z);printf("%d,%d,%d\n",x,y,z);}最后的输出结果是10 , 20,302.其次看以地阯传递void fun(int *x,int *y)*x=3;*y=4;}void main()int x=1,y=2;printf("%d %d",x,y);fun(&y,&x);printf("%d %d",x,y);}输出结果为1 2 4 3从上面两个例子来看,当调用函数时是以值的方式来传递的话,形参的值发生变化,而实参的值并没有跟着形参一起改变;当调用函数时是以地阯的方式来传递的话,形参的值发生变化,实参的值也跟着形参一起改变关键就在于要是想实现变量的真正交换,必须要用地阯传递 , 而指针和数组名传递其实是一囬事C的函数只能传值,当形参是指针的时候,传进去的值就是地址相比C,C++多个pass by reference的传递方式

    推荐阅读