C++指针 多级指针的补充理解和简单使用

很早以前写了一篇关于c++多级理解。当时写的不是很清楚,今天补充说明下。

 

1 首先我们的内存都是一块一块的内存组成的,并且每个内存都有相应的一个地址存贮的数据

   那么指针就是用来描述这个地址的。

如下图:

上图中 我们声明了一个变量i 那么系统在内存中给我们 开辟了一块 内存地址为0026f9d0的内存地址

,并且把30存贮在内存中。

紧接着我们又声明了一个指针变量 p 系统同样会在内存中给我们开辟一块内存 地址为0026f9c4

,并且把0026f9d0这个地址给我们存贮进去了。(一级指针)

最后我们又声明了一个二级指针变量 pp 系统同样会在内存中给我们开辟一块内存 地址为0026f9b3

,并且把0026f9c4这个地址给我们存贮进去了。(二级指针)

 

2  指针的简单使用。

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"

/**
  模拟尝试改变值
  method1
 **/
void change1(int i) {

    i = 20; // 这里根本就不能改变 i的值 这里的i和main方法中的i没有任何关联,这里是新申请了一个变量i
}
/**
模拟尝试改变值
method2
**/
void change2(int* p) {
    int i = 20;
    p = &i;//& 表示取地址   // 这里根本就不能改变 p的值 这里的p和main方法中的p没有任何关联,这里是新申请了一个指针变量p
    printf("method 2 pointer: %p\n", p);//%p占位符为指针地址
}
/**
模拟尝试改变值
method3
**/
void change3(int* p) {
    *p = 30; //*指针 表示取值。这里就是对p的存贮值获取 // 这里才是对main中的i进行重新复制 首先把i的地址传过来 然后对地址取值并且重新赋值
    printf("method 3 pointer %p\n", p);
}

int main()
{
    int i = 89;
    int* p = &i;

    change1(i);
    printf("original pointer: %p\n", p);
    printf("original i= %d\n",i);
    printf("-------------------------\n");

    change2(p);
    printf("change2 i= %d\n", i);
    printf("-------------------------\n");

    change3(p);
    printf("change3 i= %d\n", i);
    printf("-------------------------\n");


    int** pp = &p;
    printf("pp=%p\n", pp);

    getchar();
    return 0;
}

运行如下

 

同样 我们debug也能看到到内存的

执行完方法1以后

可以看到i的值还是89 

我们继续往下执行方法2

同样第二个方法执行完后还是89 

最后执行方法三

p地址上的值也就是i 已经变为30了。

 

最后我们看看我们的二级指针

这里就那个看到我们二级指针里面存的是一个一级指针

而一级指针当中我们存了一个变量。

 

上面就是 对指针的初步解析。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值