指针的详解(C++)

1.指针的含义

    内存单元的编号叫做地址(Address),也称为指针(Pointer)。

  1. 1 内存单元的指针和内存单元的内容是两个不同的概念,从下图可以理解:

 2.  一个指针是一个地址,是一个常量。而一个指针变量可以被赋予不同的指针值,是变量。

     现在我们用C++语言在深入了解一下指针和地址的关系

#include <iostream>
using namespace std;
int main(){
	int a = 3;
	int b = 12;
	int* c;
	c = &a;
	int** d;
	d = &c;
    cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	cout << &d << endl;
	cout << *c << endl;    
	cout << **d << endl;   
	cout << *d << endl;    //&a
	cout << &*d << endl;   //&c
	cout << **&d << endl;  //&a
}

 2.1 先梳理一下代码的流程,定义一个两个int类型的变量并初始化,定义一个一级指针和一个二级指针并初始化,最后就是指针的使用。如下图所示:

    2.1.1 所有的常量都存在常量池中,内存中保存的的常量池中常量的地址,c内存单元放的是a的地址,d内存单元放的是c的地址。

    2.2.1  首先我们需要知道a、b、c、d的地址,方便我们后面对比图,假设上面图中的地址就是a、b、c、d的地址。

      ~那*c和**d就是指取地址里面的内容,所以*c指向0x133,0x133找变量a并且打印a的值3;*d先指向0x135,x135找变量c,**d就减了一个指针等于*c,*c又指向0x133,0x133找变量a并且打印a的值3。如下图:(**d是黑线,*c是红线)

        ~那&*d和**&d,&*d------&c-------打印c的地址;**&d------**0x136--*0x135--0x133;在这里千万不要把*d和&d看成是同一个地址,*d是0x135,&d是0x136。如下图:(&*d是黄色的线,**&d是蓝色的线)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值