C语言中的*和&

本文最后更新于:2025年3月4日 晚上

What’s the difference between * and & in C?

*& 作为类型修饰符

  • int i 声明一个整数类型变量 i

  • int* p 声明一个指向整数类型变量的指针 p

  • int& r = i 声明一个对整数类型变量的引用,并且这个变量为 i. (仅用在C++ 中,注意引用必须在初始化的时候进行赋值;因此 int& i; 是不存在的)

    类似的就有:

  • void foo(int i) 声明一个函数,以整数类型变量为参数(作为一个副本,按值传递)

  • void foo(int* p) 声明一个函数,以一个指向整数类型变量的指针(整型指针)为参数

  • void foo(int& r) 声明一个函数,以整数类型变量的引用为参数(仅用在C++ 中)


*& 作为操作符

  • foo(i) 调用 foo(int). 参数通过值的副本传递

  • foo(*p) 去掉指针变量 p 的引用,用被 p 指向的整数作为参数去调用 foo(int)

  • foo(&i) 以整数类型变量 i 的地址为参数,用变量的地址为参数调用 foo(int*) (意思就是说,你要一个变量引用,我就声明一个整型指针给你)


(tl;dr)太长不看版本,简而言之,符号的作用取决于上下文环境:

  • * 既可以作为 去掉指针引用的操作符,也可以作为指针声明符的一部分;
  • & 可以作为取地址操作符,在C++ 中还可以作为引用声明符的一部分;

C语言中的*和&
https://hercules11.github.io/blog/2021/08/07/C语言中的-和/
作者
wxc
发布于
2021年8月8日
许可协议