【C++】*和&

C/C++中*和&的用法

除了常规的用法,自我理解:

*在=左边表示地址申明,*在=右边表示取地址中的值

&在=左边表示变量引用,&在=右边表示取该变量的地址

C++语言是C语言的超集。几乎所有可以运行的C程序都是可以运行的C++程序。因此,写一个不包含C++特性的C++程序是可能的,尽管cout和引用的使用(见下文)更好的构成了一个C++程序。C++和C在代码格式上偶尔会有不同,比如,在C语言中,我们这样把p声明为一个int类型的指针 int *p,而在C++中我们使用int* p(编译器并不在意你使用的是哪种格式)。

在C/C++中,*和&有很多用法,具体的使用要根据代码内容来确定。

C中*的用法

(a)    乘法运算:x=y*z;

(b)    乘法赋值运算:x*=y;相当于x=x*y

(c)    注释:/*这里是你的注释*/

(d)    指针的声明:int *p 或 int* p; 读法:p是指向一个整数类型的指针。

(e)    复合指针: int **p; 或 int** p; 读法 p是一个指向一个指向整数类型的指针的指针。(同样道理, int***p等等)

(f)     解引用: x=*p 把指针p指向的值赋值给x

&在C语言中的用法

(a)     逻辑与:if((a>1)&&(b<0))

(b)     位运算与:x=a&b;

(c)     逻辑与赋值:x&=y;与 x=x&y含义相同

(d)    求地址运算符:p=&x;读法:把x的地址赋给p(指针)

红色字体是我们一般不容易理解的地方。先来举个例子看看

#include "iostream"
#include "stdio.h"
using namespace std;

int main()
{
    int a = 5;
    int* p = &a;

    a = 8;

    cout << *p << endl;

    cout << "end" << endl;

    return 0;
}

结果为

从结果可以看出,其实p和a都指向了同一个地址,所以a的值变了,p值肯定也变了。 

C++中&的补充用法

C++中有一种C不存在的变量类型引用变量(简单说来为引用),尽管在C语言中用指针也可以实现类似的功能。

引用,指针,地址是联系密切的概念。地址是在电脑内存中的地址(一般是一些变量的值在内存中的储存位置),指针是存地址的变量,所以指针可以“指向”内存地址。概念上讲,引用变量本质上是指针的另一个名字(但是并不能被编译器实例化)

在函数内像其他变量一样定义一个引用是可能的;举例

#include "iostream"
#include "stdio.h"
using namespace std;

int main()
{
    int a = 5;
    int& p = a;

    a = 8;

    cout << p << endl;

    cout << "end" << endl;

    return 0;
}

结果为

从结果可以看出,引用的使用和对引用的变量的使用是一样的。

引用在函数的参数中被使用。

#include "iostream"
#include "stdio.h"
using namespace std;

void f(int& r)
{
    r = 2*r;
}
int main(void)
{
    int i=3;
    f(i);
    cout << i << endl;

    cout << "end" << endl;
    return 0;
}

结果为

这段程序输出“6”(2*r使被r引用的变量加倍,也就是指i)

在C语言中,实现同样的功能,我们可以通过声明f()为void f(int *r),其中r是指向整数类型的指针,然后调用参数&i(i的地址)调用函数f(),在函数f()内使用r的解引用,但是显然,C++提供了一种更简明的通过引用的方式向函数传值,从函数中返回值。

C语言具体的实现:

#include "iostream"
#include "stdio.h"
using namespace std;

void f(int* r)
{
    *r = 2*(*r);
}
int main(void)
{
    int i=3;
    f(&i);
    cout << i << endl;

    cout << "end" << endl;
    return 0;
}

结果为

转自:https://blog.csdn.net/caozixuan98724/article/details/73395598/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值