【学习总结】指针

1 程序在存储数据时的策略

为把信息存储在计算机中,程序必须记录3个基本属性:

  • 信息将存储在哪里;
  • 要存储什么值;
  • 存储何种类型的信息。

内存

1.1 简单变量

int jumbo = 12;

声明语句指出了值的类型和变量名,还让程序为值分配内存,并在内部跟踪该内存单元。

int jumbo = 12;
&jumbo = 00CAFED0;//& 取地址
//信息将存储在00CAFED0;
//要存储12;
//存储int类型的信息.

注意:

  • 变量名
    可以将变量名理解为一个指向存储空间的地址,但C++对变量名不做存储,变量名的作用只是用于编译器生成汇编代码;仅当在调试版本时,会单独存储在一段空间,供调试工具读取。

  • 变量值
    根据变量类型,存储在堆区或栈区。

  • 变量地址
    除非保存为指针,否则不会存储变量的地址。

1.2 指针(一级指针)

int *pe1 = &jumbo;

声明语句指出了指针的类型和指针名,* 指针名,可以得到该地址处存储的值。

int *pe1 = &jumbo;
pe1 = 00CAFED0;//等价&jumbo
*pe1 = 12;//等价jumbo

注意:

  • 指针名
    指针名表示的是地址。

  • *指针名
    指针名,指出定义的是一个指针变量;也可以这样理解int是一个复合类型,是指向int型的指针。

  • *运算符
    *运算符被称为间接值或解除引用运算符,将其引用于指针,可以得到该地址处存储的值。

1.3 二级指针

int **pe2 = &pe1;

首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值也需要空间来存放,是空间就具有地址;二级指针就是为了获取存放一级指针地址值的地址。

&pe1 = 00CAFEC4;//&取一级指针的地址
pe2 = 00CAFEC4;//等价&pe1
*pe2 = 00CAFED0;//等价pe1等、价&jumbo 
**pe2 = 23;//等价*pe1、等价jumbo
  • 指针的用途
    提供目标的读取或改写。

  • 一级指针
    关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途。

  • 二级指针
    关联的数据只有一个类型一个用途,就是地址;
    二级指针是为了提供对于内存地址的读取或者改写。

1.4 测试代码
#include <iostream>
using namespace std;

int main()
{
    int jumbo = 23;
    int *pe1 = &jumbo;
    int **pe2 = &pe1;
    cout << "jumbo:" << jumbo << endl;
    cout << "*pe1:" << *pe1 << endl;
    cout << "**pe2:" << **pe2 << endl;
    cout << "--------------------------" << endl;
    cout << "&jumbo:" << &jumbo << endl;
    cout << "pe1:" << pe1 << endl;
    cout << "*pe2:" << *pe2 << endl;
    cout << "&pe1:" << &pe1 << endl;
    cout << "pe2:" << pe2 << endl;
}

//结果
jumbo:23
*pe1:23
**pe2:23
--------------------------
&jumbo:00CAFED0
pe1:00CAFED0
*pe2:00CAFED0
&pe1:00CAFEC4
pe2:00CAFEC4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值