0 %

【超详细】*和&在C/C++中的常见用法(附示例讲解)

2026-07-11 05:21:55

在C/C++中,我们经常能看到*和&符号出现,下面简单介绍一下这两个符号的常见用法,并通过一些示例来加深理解。

*符号的用法用法一作为乘法运算符来使用,如a*b表示a和b两个变量相乘。

用法二可用作代码块的注释说明。与//不同的,//用于一行代码的注释说明,类似于python中的#,而/* code block */用于一个代码块的注释说明,类似于python中的``` code block ```。

用法三(重点)用作指针运算符。指针就是一个存放地址的变量 ,当指针指向某个变量时,这个指针里就存放了那个变量的地址。那为了表示指针所指向的变量的值,必须使用指针运算符*。

&符号的用法用法一表示位运算符。

用法二&&表示逻辑运算符“与”。

用法三表示取内存地址。如&a表示取变量a的内存地址。

用法四表示对变量的引用。如int &a = b,表示a是变量b的引用,可有简单地理解为b是变量a的别名,就好比如说我真名是张三,外号叫三儿,这个外号三儿就是真名张三的别名。

引用是C++对C的一个重要补充,有以下几点需要注意:

• 声明引用时必须指定它代表的是哪一个变量,即对它初始化。• 引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储单元。• 怎样区分&是引用还是取地址符呢?方法是:判断&a这样的形式前是否有类型符即int &a=b;如果有类型符(int)则是引用,否则是取地址运算符。• 对引用的初始化,可以是一个变量名,也可以是另一个引用。示例1给个简单的C++程序:

代码语言:javascript复制#include

using namespace std;

int main()

{

int a = 3;

int * b = &a;

cout << "a: " << a << endl;

cout << "&a: " << &a << endl;

cout << "b: " << b << endl;

cout << "*b: " << *b << endl;

*b =10;

cout << "a: " << a << endl;

cout << "&a: " << &a << endl;

cout << "b: " << b << endl;

cout << "*b: " << *b << endl;

}其输出如下:

代码语言:javascript复制a: 3

&a: 0x4070f0

b: 0x4070f0

*b: 3

a: 10

&a: 0x4070f0

b: 0x4070f0

*b: 10在这个示例中,我们先定义了整型变量a,并给其赋值为3。随后利用&符号取了变量a的内存地址,赋给了变量b,此时b就是一个指针,其类型是int 。所以a的值是3,&a表示的是变量a的内存地址为0x4070f0,指针b存储的是变量a的地址,也就是0x4070f0,b表示取指针b所对应的变量的值,也就是a的值,即3.

当修改b的值时候,因为指针b存储的就是变量a的内存地址,所以也就等价于修改了a的值,所以可以看到b =10操作后,a的值也发生了变化。

示例2给个简单的C++程序:

代码语言:javascript复制#include

using namespace std;

int main()

{

int a= 3;

int &b=a;

cout << "a: " << a << endl;

cout << "&a: " << &a << endl;

cout << "b: " << b << endl;

cout << "&b: " << &a << endl;

b =10;

cout << "a: " << a << endl;

cout << "&a: " << &a << endl;

cout << "b: " << b << endl;

cout << "&b: " << &a << endl;

}其输出如下:

代码语言:javascript复制a: 3

&a: 0x4070f0

b: 3

&b: 0x4070f0

a: 10

&a: 0x4070f0

b: 10

&b: 0x4070f0在这个示例中,我们先定义了整型变量a,并给其赋值为3。随后通过引用int &b = a将b作为a的别名。从输出中可以看到,a和b的值一致,且内存地址也是一样的。当我们修改b的值时,实际上等价于修改a的值。

示例3给个简单的C++程序:

代码语言:javascript复制#include

using namespace std;

void swap(int &a,int &b) //void swap(int a,int b),如果这样写则不能实现交换两个数的目的的。因为传递的方式为值传递(单向传递)

{

int tmp;

tmp = a;

a = b;

b = tmp;

}

int main(){

int a = 1;

int b = 2;

swap(a, b);

cout<< "a = " << a << endl;

cout<< "b = " << b << endl;

return 0;

}其输出为:

代码语言:javascript复制a = 2

b = 1C++中增加引用主要是作为函数参数,进行数据传递的功能。我们知道如果用变量名作为实参,其传递方向是单向的,而用引用作为实参其传递方向是双向的,即既能将实参的值传递给形参,也能将形参的值传递给实参。

在本例中,我们在swap函数中使用引用,故在main函数中调用swap函数时只需要传入变量名即可。但其实用引用完成的工作,用指针也能完成。但引用比指针的使用直观、方便,直截了当,不必“兜圈子”,容易理解。下面给出如果使用指针,如何写这个程序:

代码语言:javascript复制#include

using namespace std;

void swap(int * a,int * b)

{

int tmp;

tmp = *a;

*a = *b;

*b = tmp;

}

int main(){

int a = 1;

int b = 2;

swap(&a, &b);

cout<< "a = " << a << endl;

cout<< "b = " << b << endl;

return 0;

}该程序输出与上面使用引用相同。

参考:

https://www.cnblogs.com/wxl845235800/p/7449202.html

https://www.bilibili.com/read/cv6763616

https://blog.csdn.net/xiaojinger_123/article/details/120453429

Posted in 世界杯小组赛分组
Copyright © 2088 2034年世界杯_足球中国世界杯预选赛 - qdhuaxue.com All Rights Reserved.
友情链接