相关疑难解决方法(0)

Java是"通过引用传递"还是"传递价值"?

我一直认为Java是传递引用的.

但是,我看过一些博客文章(例如,这个博客)声称它不是.

我不认为我理解他们所做的区别.

解释是什么?

java methods parameter-passing pass-by-reference pass-by-value

6270
推荐指数
80
解决办法
189万
查看次数

C++中指针变量和引用变量之间有什么区别?

我知道引用是语法糖,因此代码更容易读写.

但有什么区别?


以下答案和链接摘要:

  1. 指针可以重新分配任意次数,而在绑定后无法重新分配引用.
  2. 指针可以指向nowhere(NULL),而引用总是指对象.
  3. 您不能使用指针来获取引用的地址.
  4. 没有"参考算术"(但您可以获取引用所指向的对象的地址,并对其进行指针运算&obj + 5).

澄清一个误解:

C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:

int &ri = i;
Run Code Online (Sandbox Code Playgroud)

如果它没有完全优化,则分配与指针相同的存储量,并将地址i放入该存储中.

因此,指针和引用都使用相同数量的内存.

作为基本规则,

  • 使用函数参数和返回类型中的引用来提供有用的自我文档化接口.
  • 使用指针实现算法和数据结构.

有趣的读物:

c++ pointers reference c++-faq

3115
推荐指数
34
解决办法
94万
查看次数

传递参考与传递值之间有什么区别?

有什么区别

  1. 通过引用传递的参数
  2. 一个由值传递的参数?

你能给我一些例子吗?

language-agnostic pass-by-reference pass-by-value

539
推荐指数
11
解决办法
65万
查看次数

在C中通过引用传递

我试图在C中使用传递引用,以便该函数可以修改传递给它的参数的值.这是函数签名:

int locate(char *name, int &s, int &i)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译它时,我得到这个错误,特指上述行:

错误:在'&'标记之前预期';',','或')'

如果我删除'&'程序将编译,但它显然无法正常运行.这有什么不对?如何通过参考工作打电话?

c pointers reference function

17
推荐指数
3
解决办法
5万
查看次数

这是 C 中的按引用调用还是按值调用?

我正在读一本由 Brian W. Kernighan 和 Dennis M. Ritchie 撰写的《c 编程语言》一书。

本书列出了下面的代码

void strcpy(char *s, char *t){
    while((*s = *t) != '\0'){
        s++;
        t++;
    }
}
Run Code Online (Sandbox Code Playgroud)

并说:

因为参数是按值传递的,所以 strcpy 可以以任何它喜欢的方式使用参数 st

我不同意这一点。为什么上面的参数是按值传递的?

根据另一本书《C 如何编程》:

在 C 中,您使用指针和间接运算符来模拟引用调用。当调用带有应修改参数的函数时,将传递参数的地址。

从后一个角度来看,它绝对是按引用调用。

请告诉我哪种方法是正确的以及为什么,谢谢!

顺便说一句,赋值后*s = *t,与哪一个进行比较'\0'*s或者*t

c kernighan-and-ritchie pass-by-reference call-by-value

3
推荐指数
1
解决办法
1804
查看次数