【C++】指针 与 引用

计算机程序存储数据时必须跟踪三种基本属性,既:

  • 信息存在何处
  • 存储的值
  • 存储的信息是什么类型

当我们定义一个变量时,程序会根据变量的类型找个长度合适的地址块,将该地址块命名为变量名/标识符,同时将初始化的值存入该地址块下。(找一块空间,将其命名,存储数据,命名只是为了方便写代码,实际上汇编后变量名并不存在,但人类写代码总不能用地址,效率低繁琐且难以记忆。)

关于变量名并不存储这件事-1

关于变量名并不存储这件事-2

   string wharf = "fries";
   cout << "wharf的数据:" << wharf << endl;
   cout << "wharf的地址:" << &wharf << endl;

   string *pointer = &wharf;
   cout << "pointer存储的数据(也就是wharf的地址): " << pointer << endl;
   cout << "pointer存储数据的地址(也就是存储wharf地址的地址): " << &pointer << endl;
   cout << "pointer存储的数据的数据(也就是wharf地址的数据):" << *pointer << endl;
   cout << "pointer存储的数据的数据的地址(也就是wharf地址的数据的地址,是的又绕回来了):" << &*pointer << endl;

运行结果:

wharf的数据:fries
wharf的地址:0x61fde0
pointer存储的数据(也就是wharf的地址): 0x61fde0
pointer存储数据的地址(也就是存储wharf地址的地址): 0x61fdd8
pointer存储的数据的数据(也就是wharf地址的数据):fries
pointer存储的数据的数据的地址(也就是wharf地址的数据的地址,是的又绕回来了):0x61fde0

对变量使用地址运算符&才能得到地址0x61fde0(address)

文字说明有点绕,咱直接上图 (我真是个天才)

  • wharf(码头):打印wharf,本质上就是打印地址0x61fde0中的数据fires,输出结果为fires。
  • &wharf:不取数据,直接打印地址,输出结果为0x61fde0
  • string pointer = &wharf:将wharf地址存进名为pointer、地址为0x61fdd8的内存块此时pointer的作用类似于给你指引个方向,告诉你想要的东西在哪,这里是没有实物的(①这里的*星号告诉程序pointer是个指针类型)
  • pointer:看看指针里存的是什么,里面存了一串地址。
  • &pointer:这个存放地址0x61de0的内存块地址是0x61fdd8
  • *pointer(②​​​​​​​这里的* 名为解除引用(dereferenceing)运算符,与定义时的*并不是一个意思):我们沿着pointer给出的码头地址,去那边一探究竟,原来码头有薯条。
  • &*pointer:废物操作,解引用得到内容,再根据内容找存放内容的地址🤔 (&*pointer = pointer

总结:

  • 指针不过是一种命名,本质上也是存储数据的一块内存,只不过存的东西比较特殊,是其他内存块的地址。
  • * 符号有两种用途,①定义指针变量,②作为解除引用运算符使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值