1. c语言判断题:在标准C语言中,函数参数传递是单向传递,即由实参传递给形参.
C语言中,举个例子swap(int a,int b)函数。你的main()函数中调用swap(x,y)。是把x,y的值传过去,传给a,b后。x,y和a,b的联系就断了。所以叫做单向传递。
C++有一种方式叫做引用,例如:int &i=x; 可以理解为i是x的别名,地址还是相同的。这时候在swap()函数中,x,y是真正地参与到运算中去。并把结果返回调用函数。所以这个叫做双向传递。
这是我的理解,如果不对,请见谅。
2. c语言第三题 不存在双向么 值传递是单向 地址传递呢
C里只有所谓"值传递",即形参是实参的副本,这一方式,所谓的"址传递"依旧是"值传递",只不过传递的值是地址而已,形参的改变依旧无法改变实参本身
只有引用才可以做到双向,而C里是没有引用的
3. C语言简单判断题:在标准C语言中,函数参数传递是单向传递,即由实参传递给形参.
值传递。
实参与形参数据传递有两种方式:值传递与地址传递。
地址传递的形式为
int
&a=b;
也就是我们所说的引用,但引用只有c++中有,所以c语言都是值传递的。
有些人有误解:认为c语言的int
*p=&a;不也是按地址传递吗?其实不是这样的。
深入理解值传递与地址传递就会发现:
值传递是:把实参的值传给一个变量(形参)。所以int
*p=&a也是把a的地址值传给了指针变量p
地址传递是:直接把地址传进来,没有赋给任何变量,这样在函数体内对形参的操作也就是对实参地操作。有这种功能的也就是引用(&)了。
4. c语言,关于形参实参单向值传递!
分两种情况给你对比一下
函数形参用普通变量,当函数被调用的时候,实参的值被赋值给了形参,函数被调用的时候开辟了内存空间给形参,也就是数据被复制了,然后函数开始处理形参的数据,这个时候和实参的数据是没有任何关系了。当函数结束的时候形参的内存空间是要被释放,或者说删除的,所以对实参啥也没干,只是拿了实参的数据复制了一份,然后对复制的那一份算的很起劲,结果最后删除了,啥也没干。
函数形参用指针,当函数被调用的时候,实参指针,也就是把地址复制了一份给形参,但是函数中我们用取内容符号'*'对形参指针所指的内容,同时也是实参指针所指的同一份内容进行处理,函数结束的时候形参指针的值是被释放了,可是形参指针,同时也是实参指针所指的内容还在。
感觉讲的蛮清楚了,不懂再追问。
5. C语言中函数间的参数传递本质是单向的变量拷贝是什么意思这个程序中的函数为什么没用
函数间的参数传递本质是单向的变量拷贝 这句话值传递函数的参数传值是把当前变量拷贝一份然后传进函数使用,函数中对参数进行的改变不会影响函数外部的变量。
如果需要改变,使用指针传递参数,这样传递的是变量的地址,而不是变量值的拷贝。
swap(int x, int y)没有起到交换的作用就是像上边所说:
在main函数中a=3;b=4;然后swap(a,b);此时进入swap的a,b是重新声明了两个变量,分别是a,b的拷贝。也就是x=a;y=b;然后在函数中进行交换只是交换了x,y的值,对于函数外的a,b根本没起到作用
6. C语言,函数参数传递方式是单向的,形参不能给实参赋值是什么意思 自定义一个函数最后用return
实参把值传给形参以后就和形参切断联系了,对形参操作后得到的是副本。c语言是严谨的,一个地址对应唯一的参数,但同一个参数可能有不同的地址 拿经典的swap交换函数举例 如果你交换的不是指定地址的变量 只是普通变量 那么他给你返回的结果就是你给的变量的副本的交换 而当交换对象变成指定地址的对象的时候 就有唯一性了 这是真正的交换
拿现实生活举例 让张三和李四交换他们的妻子 天啊你怎么知道是哪个张三哪个李四?为了不影响其他的张三李四,只好新建一个张三和李四的副本来交换了 这个就叫严谨 所以必须知道他们二人的明确地理位置 才能交换他们的妻子 实现真的交换
7. C语言函数调用参数传递的是什么
分两种,一种是按值传递,一种是按地址传递,
按值传递就是在子函数中开辟出一个临时内存空间,将传递的数值保存在这个空间中,当子函数结束后,这个内存空间就会释放了!
按地址传递则是把主函数开辟的某个内存空间首地址传递给子函数,子函数可以直接读写主函数上这段内存空间,当子函数结束后,这部分空间不会被释放,主函数将继续使用这段空间!
8. c语言,难道地址传递不是双向传递吗
地址传递不是双向传递。
c/c++ 语言的 地址传递 和 数值传递 的概念 很困惑人,学的时候貌似记住了,用的时候又会搞混。
要记住的是,想把 函数运算 结果 的 值 带回来,
(1) 对应 的 形参 必须 用 指针 (有星号)。
(2)函数里要赋值。(有星号)。
例如, 交换 a,b 的数值:
void f(int *a, int *b) // 形参 用 指针
{
int t;
t = *a; *a=*b; *b=t; //赋值
}
-----------
题目里,k=a; a=b; b= k; 是函数里 交换地址/赋地址
不符合 “函数里要赋值”,所以不能带回新值
(在函数里,你若打印, a,b 的值,好像交换了,实际上 不能 带回 到 调用语句处。)
9. c语言中,实参向形参传递时,什么时候用单向值传递,什么时候用地址传递
C语言在形参和实参之间传递的不仅是值传递,也包括地址传递的。
细节如下:
C语言函数参数传递包括按值传递和按地址传递两种;
当形式参数是数组、指针时都是使用的按地址传递。