c语言中值传递,C语言的函数调用中怎样判断是地址传递还是值传递

1 , C语言的函数调用中怎样判断是地址传递还是值传递int,char,float,结构体,枚举,联合均为值传递;数组名,指针,引用均为地址传递;比如func(int,char,float,struct S)值传递func(int *,int a[],int &a)地址传递c语言调用参数传递地址的话需要使用指针作为参数,如:void test1(int * p)// 传地址}void test2(int i)// 传值}
2,c语言中函数中值的传递是什么意思 谢了1.值传递,返回函数值2.指针传递,返回数据地址3.引用传递简单来说函数就是c语言的模块 , 一块块的,有较强的独立性,但是可以相互调用 。这是c和c++区分的地方,c++面向对象,对象独立完成功能,无需调用 。一个c程序就可以是一个函数,里面再包含n个函数 。【延展】c语言中函数和函数体的区别是什么?第一、 简单来说函数就是c语言的模块,一块块的,有较强的独立性,但是可以相互调用 。一个c程序就可以是一个函数,里面再包含n个函数,有固定输入和输出格式的子程序,函数具有明确的功能、入口调用参数和返回值 。第二 、函数体是用花括号括起来的若干语句,他们完成了一个函数的具体功能 。函数体内的前面是定义和说明部分,后面是语句部分 。【c语言中值传递,C语言的函数调用中怎样判断是地址传递还是值传递】
3,C语言关于值传递与地址传递的问题这就是传值 的一个特性,系统把参数的值,压到堆栈里面,传入到函数内函数内的变量,都是临时变量,改变后 , 也不会传递出来,也传递不出来传地址则不同,把地址传到函数内以后 , 函数修改了这个地址里面的 内容了所以,退出函数后,虽然传入的地址不会传递出来 , 但改变的内容已经改变了temp=&a; &a=&b; &b=temp; 这种写法是不对的,不能&a=&b;不能这样取地址,然后把地址赋值给地址,可以赋值给变量lfm13720打的比方我是第一次看到 , 不错,很形象 。来晚了 上面的 回答都说到了不知道是否是LZ需要的因为第一个程序是值传递,只是在swap()函数中进行了值的交换 , 如果在swap中输出结果是正确的,但是回到main()函数后,原来的值没有变 。比如a=1,b=2,a在内存中的地址是1000,b的地址是2000,在进行 temp=&a; &a=&b; &b=temp; 运算以后,a的地址是多少,值是多少?b的地址是多少 , 值是多少?? 这个变量名称和值、地址的关系是怎么样的?? 这个地址传递,在交换后等于a b的指针交换了 , a地址2000值 2b地址1000值 1编程中,很多东西要你自己去摸索,才能真正的理解 。关于地址与值的问题,其实你自己可以试,把变量的地址输出来看看看是不是一样,比如 printf("%x",&a); 这样就是以把变量a的地址用16进制的方式输出来 , 看看地址到底是怎么一回事 。传值与传地址可以这样理解:就像我把我写的作文抄了一份给你,你拿去看了之后把有的地方改了,现在我要交作文,而我有一份,所以我直接交了,我交的作文内容并没有变 , 这就是传值,即值传递 。同理,如果我把我的作文直接给你,你看了后也把有些地方改了,现在我也要交,你只能还给我,我再交,这时我交的就是被你改过的了,这就是传地址,即引用传递 。这只是我的理解,有误的地方还请指正 。
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的值是不会变化的,这要你去理解指针不是滴,函数参数值是从右到左的,我举一个例子给你看看!#include<stdio.h>int main() void fun(int i,int n); int i=0; fun(i++,i++); return 0;}void fun(int i,int n)printf("%d\t%d\n",i,n);}1、C语言中函数参数的传递有两种方式:传值与传地址 。传值就是将实参的值传递给形参,使得形参的值与实参一样 。传地址就是将实参所在内存单元的地址传递给形参,使得形参指向实参所在的内存地址 。2、举例说明如下:#include<stdio.h>int fun1(int a, int b); return a>b ? a : b;}int fun2(int *a, int *b); return *a>*b ? *a : *b;}void main() int x=5, y=3; int z1 = fun1(x, y); // 传值调用方式 int z2 = fun2(&x, &y); // 传地址调用方式}是把x的值传给a,x+=2的值传给b吗?是的那被调函数执行完后的值返回给主函数吗?看你怎么返回,比如return就是返回给主函数还是有return就有返回值,没有就不返回吗?可以这么认为,其实不是如果不返回给主函数,那设置被调函数有什么意义?这就类似pascal里面的过程,没有返回 , 但执行了操作,好比你寄的平信,虽然不知道对方有没有收到,但至少让邮局忙乎了一阵 。有些函数重在处理一些数据等 , 而不在乎返回,比如srand 函数没有返回 , 但它设置了随机种子1、C语言中函数参数的传递有两种方式:传值与传地址 。传值就是将实参的值传递给形参,使得形参的值与实参一样 。传地址就是将实参所在内存单元的地址传递给形参,使得形参指向实参所在的内存地址 。2、举例说明如下:#include<stdio.h>int fun1(int a, int b); return a>b ? a : b;}int fun2(int *a, int *b); return *a>*b ? *a : *b;}void main() int x=5, y=3; int z1 = fun1(x, y); // 传值调用方式 int z2 = fun2(&x, &y); // 传地址调用方式}

    推荐阅读