问题标签 [call-by-value]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 这个调用是引用还是 C 中的值?
我正在读一本由 Brian W. Kernighan 和 Dennis M. Ritchie 撰写的关于 c 编程语言的书。
这本书列出了下面的代码
并说:
因为参数是按值传递的,所以 strcpy 可以 以任何它喜欢的方式使用参数s和t
我不同意。为什么上述参数是按值传递的?
根据另一本书C如何编程:
在 C 中,您使用指针和间接运算符来模拟调用引用。当调用带有应该修改的参数的函数时,会传递参数的地址。
在后一种观点中,它绝对是引用调用。
请告诉我哪种方法是正确的,为什么,谢谢!
顺便说一句,分配后*s = *t
,与哪个比较'\0'
?*s
还是*t
?
c++ - 应避免调用复制构造函数的两种情况
我已经了解了关于调用复制构造函数的三个案例
1. 一个变量是从同一个类的对象初始化的
2.一个函数被调用一个类的值参数
3. 函数返回的值是类的对象
教科书还说对于上述两种情况(case2 和 3),为了避免调用复制构造函数,请使用 call-by-reference
我已经搜索了一些信息,但我无法完全理解。
例如(我自己编写了代码)
我找到了一些关于这个的信息。
首先,当我们传递一个类对象的参数时,如果参数是引用形式而不是值,则函数一结束就不会调用析构函数。主函数结束时调用析构函数
其次,在复制参数时调用构造函数,无论参数形式是按值调用还是按引用调用(在代码中,String &s 或 String s)
我是对还是错?
c - 如何将参数传递给函数指针
我正在使用 c 中的函数指针,因为我需要自定义 API 库的回调机制。用一个简单的例子总结一下:
SY_msg的大小为 1024 字节。因此堆栈中有 1024 个字节。
指向userfuncion()的指针作为 calback_wrapper[] 中的第一个元素存在。
但我想拥有以下内容:
有可能找到“某个地方”的地址吗?我的编译器是 gcc。
c - 如何理解指针 (*) 和地址 (&) 运算符的概念?
我试图理解这两个运算符的重要性,所以我为此编写了这段代码。
但是,我注意到除非我将 function 的参数更改为 ,否则它将不起作用analyse_inst()
,analyse_inst(char * mnemonic, char * operands)
这意味着我将传递指向该函数的指针。但为什么需要这样做?
另外,我查找了“通过引用传递”。根据tutorialspoint.com,它的定义:
将参数传递给函数的引用调用方法将参数的地址复制到形式参数中。在函数内部,地址用于访问调用中使用的实际参数。这意味着对参数所做的更改会影响传递的参数。
由此,我得到通过引用传递一个变量然后修改该值将意味着函数外部的相同变量也将被更改;而按值传递变量不会更改位于函数外部的相同变量。
我哪里出错了?
如何修改我的代码,以便通过引用传递两个变量?
(PS 我已经阅读了关于同一主题的其他 Stack Overflow 线程,但如果有人能在我编写的代码的上下文中解释它,我将不胜感激)
c - 为什么指针的值还是 20?
为什么在函数退出时指针仍然是 20?我在func()
结束时跳跃,指针在其中被修改,最后printf()
,*p
值将指向堆栈中的一些随机内容。
pass-by-reference - 当我们在这个函数中传递值结果时会发生什么?
考虑这段代码。
如果我们假设该语言支持按值传递结果,那么答案是什么?据我所知,按值传递结果复制进出。但是我不确定n
当它被复制到两个不同的形式参数时会是什么值。应该x
并且y
像参考一样行事?或者应该n
得到x
或者y
取决于最后复制出来的值?
谢谢
c - 在我的代码中对引用调用和值调用感到困惑
今年刚开始在我的大学学习 C,我很困惑我的函数调用是通过引用还是值。
我在 main 中创建了一个名为 freq_array 的空数组,并在调用函数频率时将其作为参数传递。那么既然在 func 调用之后,空数组现在将包含值,这被认为是按引用调用吗?我在其他通过引用调用的网站上读到使用指针,所以我有点困惑。谢谢你。
c++ - 在 C++ 中使用递归时无法传递二维数组
我在stackoverflow中看到了一个关于如何在函数中传递a的答案,2d-array
当我尝试其中一个时给出了3个或更多方法,它工作得很好。但是当我尝试使用该方法进行回溯时,它给了我一个错误。
我尝试在全球范围内声明它,但我想学习如何以这种方式使用它
错误:从 int(*)[5] 到 int [-fpremissive] 的无效转换
scala - 尾递归和按名称/值调用
学习 Scala 和函数式编程。在以下尾递归阶乘实现中:
我想知道让第二个参数按值调用与按名称调用(正如我所做的那样)是否有任何好处。在第一种情况下,每个堆栈帧都承载着一个产品。在第二种情况下,如果我的理解是正确的,整个产品链将被转移到第 th 堆栈帧的情况下if ( n== 0)
,n
所以我们仍然必须执行相同数量的乘法运算。不幸的是,这不是 a^n 形式的乘积,可以通过重复平方以 log_2n 步计算,而是每次相差 1 的项的乘积。所以我看不到任何优化最终产品的可能方法:它仍然需要 O(n) 项的乘法。
这个对吗?就复杂性而言,按值调用是否等同于按名称调用?
c - 值调用可以改变主程序的值
考虑以下程序:
这里 和 的值b
正在c
交换。
另一个代码是:
在这里,虽然存在相同类型的函数调用,但main()
程序中任何变量的值都不会改变。
众所周知,C 代码中没有引用调用。所以,我的问题是,虽然两个程序中都有相同类型的函数调用,那么为什么一个交换变量的值而另一个不能交换?
在第二个程序中,指针正在交换意味着地址也在交换。对??但不影响价值。在第一个程序中,地址和指针被交换,同时值也被交换。但为什么??
我也想知道,在哪里按值调用,可以改变main()程序的值(有或没有返回函数)??