C/C++下的*和&总结.md

c++中的*&对于初学者来说,确实有点让人搞懵。因为在变量的定义和调用时,*&都会表现出不一样的含义。

* 总结

用于定义

*在定义时是声明该变量是一个指针,例如

int *p; //那p就是一个int型的指针。

例1:

int a = 0; int *p = a; //那p的值就是a的地址。

上面的int a = 0; int *p = a;实际上是int a = 0; int *p = &a;这两者是等价的!!!

原因是int *p = &a;时,c语言本身提供了可以略去&的简写,但是本人不是很喜欢这样的写法,因为这样会误导初学者!

所以大家还是写全比较规范一点,写完int *p = &a,这样比较好。

c++就没有这样的简写机制,大家可以测试一下。

用于调用时

*在调用时是指针指向的那个变量,是取值运算符。

例2:

int a = 0; int *p = &a; printf("*p = %d\n", *p);

&总结

用于定义时

&在定义时是定义一个引用,例如:int a = 0; int &b = a;那么b就是a的引用,即b=0;如果再给a赋值a=10,则b也会变为10;如果给b赋值b=20,则a也会变为20;

用于调用时

&在调用时是一个取地址运算符。例如:int a = 0; printf("&a = %p\n", &a);会打印出a的地址,这个地址因为变量a在各个计算机的地址的不一样,所以打印的也不一样。

&在调用时还有一种与运算,如:int a = 0; a&=0; //按位与操作,这个就不细说了

关于int *a; int &a; int & *a; int * &a

上述的四条语句,前面两个很好理解,而后面两个,大部分C++初学者都会比较困惑,今天我也是查阅了一些资料以后才恍然大悟。下面具体来说明一下:

int i;

int *a = &i;//这里a是一个指针,它指向变量i

int &b = i;//这里b是一个引用,它是变量i的引用,引用是什么?它的本质是什么?下面会具体讲述

int * &c = a;//这里c是一个引用,它是指针a的引用

int & *d;//这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的

引用的本质

引用就是指针,两者没有区别。我们可以把引用想象成一个不需要*就可以访问变量的指针,对比如下程序:

void function(int *a)
{
    *a = 100;
}

int main()
{
    int x = 200;
    int *b = &x;
    function(b);
    return(0);
}

void function(int &a)
{
    a = 100;
}

int main()
{
    int x = 200;
    function(x);
    return(0);
}

以上两段程序完成的功能是一样的。

int * &aint & *a

我在写这两句语句时,在int*(&)间空了一格,而后面的&(*)紧跟a。原因是:分析此类语句时,最简单的办法就是从右往左读,离变量名最近的符号对其类型有最直接的影响,即先看a前紧跟的是什么,它决定了a的类型。例如,对于int & *a,此处是*,表示其首先是个指针,指针的类型是一个int型引用。而int后的一个空格是为了防止int *a, b;//a是指针,而b不是

int * *a;

它的功能和int * &a一样,两者生成的二进制代码一样。这再一次说明了引用就是指针。

参考链接

c++的*与&简单总结


One more thing

更多关于人工智能、Python、C++、计算机等知识,欢迎访问我的个人博客进行交流, 点这里~~

展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值