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语言中的-和/