相关疑难解决方法(0)

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万
查看次数

如何为变量赋予别名

我想用不同的名称调用相同的变量,如何为其分配别名?

我是否坚持使用宏,比如

#DEFINE Variable Alias
Run Code Online (Sandbox Code Playgroud)

综上所述:

  1. 我更喜欢用C语言申请
  2. 我有一个信号,可以是多种类型的变量(温度,距离等).
  3. 我想为该信号分配多个别名

我目前在C中使用函数作为重命名方法.

所以给定变量: int signal

我会做以下事情

int Temperature(){return signal;}
Run Code Online (Sandbox Code Playgroud)

c c++

3
推荐指数
4
解决办法
2万
查看次数

如何对不可变值进行可变引用

我刚刚开始学习一点Rust,并且对变量的可变性概念非常感兴趣.

我正在尝试编写与此C++程序非常相似的内容.

#include <cstdio>

void do_something(int &var) {
   var++;
}

int main() {

    int a = 3;
    int b = a;
    printf("a is %d and b is %d\n", a, b);
    do_something(b);
    printf("a is %d and b is %d\n", a, b);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望看到:

a是3,b是3

a是3,b是4

这个想法是传递引用呈现b可变,但a不可变.

以下是我假设在Rust中编写此程序的方法:

fn main() {
    let a: i32 = 3;
    let b: &mut i32 = &a;

    println!("a is {} and b is {}", a, b);
    do_something(b);
    println!("a is {} and …
Run Code Online (Sandbox Code Playgroud)

mutable pass-by-reference rust

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

标签 统计

c++ ×2

c ×1

c++-faq ×1

mutable ×1

pass-by-reference ×1

pointers ×1

reference ×1

rust ×1