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中的引用和C语言中的地址传递有什么区别引用相当于给 原来的变量取个别名 就像给人取外号一样 地址传递就是指针了以两个人在两台机器的文件拷贝做例子: 值传递好比是你把文件复制一份,通过网络传给他 , 然后他可以在他本机上对文件做任何的修改,修改会保存下来,但是你机器上的文件不会发生任何的变化 。即形参与实参是两个不同的变量,各自占用不同的存储单元 。地址传递好比是你把文件在网络上的地址告诉他人,他人通过网络访问你机器上的文件 , 他可以对文件进行修改并保存,此时,文件的内容就会发生变化 。即形参与实参是相同的变量,占用同一段内存空间 。引用是别名 地址传递 是指针你说的是指针吧? 没区别引用 , 按照Thinking in C++的说法,就是自动使用*运算符取内容的指针【c引用传递和地址传递,C语言的函数调用中怎样判断是地址传递还是值传递】
3 , 谁能说一下C语言参数传值和传引用是什么概念谢谢你好,首先纠正一下你的一个错误,C语言里没有引用的概念 。引用就是一个别名,定义一个变量a,再定义一个引用c,即 int &c = a;就是给a变了个别名,实际上是一个实体 。传值就是将变量的值复制一遍,在函数调用栈上使用,还有一个传指针,即传变量地址,就是将变量的地址传到函数栈上去,这样,函数在栈上执行对该变量的操作都会直接操作到原变量的值 。传引用和传指针都能直接改变原变量的值,而传值不能修改原变量 , 只能修改它们的复制品(即在栈上建立的变量并被赋予了传进来的变量的值);C语言只能“参数传值”,没有“引用传递” 。C++有引用传递 。传值就是传递值 , 引用传递就是传地址,可以形实参数可以同步变化 。你好!传值只是把这个变量的值赋给形参 , 改变形参的值,实参不变 。传引用时改变形参,实参也会改变 。希望对你有所帮助,望采纳 。
4,怎么区分C语言里的按值传递与按址传递有两种方法可以实现地址传递一个是指针,另一个是引用 , 就是在变量前加&.值传递就是普通用变量名就可以了 。都是值传递,真正的引用传递是出现在c#中 , 当你传指针的时候,实际上你传的是指针所指向的地址值,也就是把地址值传过去 , 但是这个地址值也是通过值传递过去的,即函数内的指针指向的地址值是原来的地址值的一个拷贝,但是由于地址值相同,所以你在函数内对该指针进行解指针并进行修改,你也修改了外部的那个指针的值(注意,修改的不是地址值)*p = 30;那么主函数内的值也变成了30,因为是对同一个地址存放的数据进行了操作按地址传递形参是要用到指针的按地址传递形参才能改变实参 。可以改变两个数的大小 。我很清楚的记得,老师(教授)说"函数之间的传递都是值的传递",而且他特别的强调了"指针的传递,实际上也是值的传递,它只是把地址的值传递了过去".呵呵~~ 在实际用当中,我也体会到了,也很好的理解了他的这句话哦~~5 , 在C语言中有地址传递这一说吗详情见下面这个是C++的写法 。&是取别名 。void CreateALGraph(ALGraph &G)如果这么调用:CreateALGraph(g);那么在调用过程中G和g表示同一位置,并且不分配空间给G,G和g占用同一空间,G是g的别名 。如果要使上面的代码正常运行 , 请将文件的后缀改成cpp 。为了弄清楚这个问题 。我们来看看指针和取别名的区别 。看这个函数申明:void CreateALGraph(ALGraph *G)如果这么调用:CreateALGraph(&g);这里在调用函数的时候,先给G分配一个空间(4字节 , 指针在现在编译器中基本都是占4个字节),然后取g的地址,将这个地址复制给G 。也就是说G中存放的是g的地址 。这里要注意的是,G里面的内容虽然是g的地址,即G指向g 。但是G分配了空间 , 它和g不是同一个空间,G是g地址的副本而已 。对比上面取地址的调用可以看到 , 指针和取地址的区别就是形参是否分配空间的区别 。& 这个符号在C++中可以用于定义引用,就是在类型名后面加上一个&或者两个&,分别用于定义左值、右值引用,这是C++特有的语法 。引用相当于一种自动间接引用的指针,引用和指针的作用类似,但是使用引用比指针来的放便 。你写代码要么就正正规规用C++的风格写 , 要么就用C语言来写,不要写这些混合的代码 。//这道题是对于升序的字符序列,转换为逆序//这里参数传递的是字符数组的头指针//通过该指针可以修改main函数中数组p指向的内存//换句话说,fun中的w和main函数的中的p不是同一个变量(值传递),但这两个指针指向的内存空间一样(值传递 , copy了指针的指向)//所以在fun函数内修改,会改变main函数中p指向的内容#include #include void fun(char *w,int n) { char t , *s1 ,  *s2; s1=w; s2=w+n-1; while(s1 } void main() { char *p; p=“1234567”; fun(p,strlen(p)); puts(p); }

    推荐阅读