前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【超详细】*和&在C/C++中的常见用法(附示例讲解)

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

作者头像
自学气象人
发布2023-01-13 21:12:31
2K0
发布2023-01-13 21:12:31
举报
文章被收录于专栏:自学气象人自学气象人

在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<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;
}

其输出如下:

代码语言: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<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;
}

其输出如下:

代码语言: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<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;   
 }

其输出为:

代码语言:javascript
复制
a = 2
b = 1

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

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

代码语言:javascript
复制
#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 https://www.bilibili.com/read/cv6763616 https://blog.csdn.net/xiaojinger_123/article/details/120453429

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自学气象人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • *符号的用法
    • 用法一
      • 用法二
        • 用法三(重点)
        • &符号的用法
          • 用法一
            • 用法二
              • 用法三
                • 用法四
                • 示例1
                • 示例2
                • 示例3
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档