备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 自学气象人 【超详细】*和&在C/C++中的常见用法(附示例讲解)
3 0

海报分享

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

在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++程序:

#include<iostream>
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;
}

其输出如下:

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++程序:

#include<iostream>
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;
}

其输出如下:

a: 3
&a: 0x4070f0
&b: 0x4070f0
a: 10
&a: 0x4070f0
b: 10
&b: 0x4070f0

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

示例3

给个简单的C++程序:

#include<iostream>
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;   
 }

其输出为:

a = 2
b = 1

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

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

#include<iostream>
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