指针理解入门(若读懂这些)

0. 地址操作 — 指针

指针是C/C++语言中一个重要的数据类型,能否正确理解和使用指针是衡量是否掌握该语言的一个标志。

1. 指针的概念

  • 内存——由内存单元构成
    • 内存单元的地址
      • 指内存单元的编号
    • 内存单元的内容
      • 存放在内存单元中的数据
  • 在C/C++语言中,每个变量都分配有确定的内存空间。
    • 使用变量名可直接访问内存中的数据;
    • 通过变量的地址也可间接访问内存中的数据。
  • 特殊变量 —— 指针
    • 存放“地址”(指针)的变量 —-> 指针变量
    • 变量的地址 —-> 变量的指针
  • 指针用途:
    • 参数传递
      • 指针作参数可以实现参数按引用传递的功能
    • 动态分配
      • 利用动态分配可构建动态数组,动态数组需要借助指针实现
    • 数据结构
      • 创建可伸缩的数据结构,如链表、棧与队列、树和图等

2. 变量与指针

变量有地址,指针变量可以存放变量的地址。当指针变量中存放某个变量的地址后,我们就说
该指针变量指向这个变量。

使用指针变量的三个步骤:

  • 定义指针变量, 即给指针变量分配内存空间;
    • 指针变量的定义格式:
      数据类型 * 变量名; (数据类型 * —-> 表示指针类型)
      • ”*”是指针类型变量的标志符号;
      • 变量名–为指针变量名(构成同标识符);
      • 数据类型–为指针变量所指向变量的数据类型;
  • 对指针变量赋值, 即使指针变量指向某对象,该对象可以是变量、数组、函数或动态分配的一块内存空间等;

    • 指针变量初始化:
      在定义指针变量的同时为指针变量提供初值。如: int a=5,*pta=&a; 其中a的初值为5,pta的初值为整型变量a的地址。 这时,pta与a的关联如下:
      pointer1
    • 使用赋值语句为变量提供初值:
      上述定义语句:
      int a=5,*pta=&a;
      与下面语句组的功能是等效的。

      int a,*pta; //先定义变量
      a=5; //使用赋值语句提供初值
      pta=&a; //使用赋值语句提供初值
      
      • 提醒:
        pta=&a; 不可写成:*pta=&a;
        因为, *pta并不表示指针变量pta,而表示pta所指向的变量a。指针变量与指针所指向的变量是两个完全不同的概念。
    • 定义多个指针变量
      例如: double *p1,*p2;(每个指针变量前面都有*)
      • 定义2个双精度型的指针变量p1和p2,它们只能指向 double型变量。
      • 变量p1和p2的类型为:double *
  • 通过指针变量间接访问所指向的对象:
    pointer1

    (1)&-取地址运算符
    &变量名 //获取变量的内存单元地址
    (2)*-指针运算符(也称为间接访问运算符)
    *指针变量名 或 *指针常量 //表示该指针所指向的 变量
  • 示例:
    pointer1
  • 注意:
    • 不要访问没有被初始化的指针变量
      如: int *p; cin>>*p; // 这样使用指针p是危险的!
      由于p变量未初始化,p中可能存在一个不确定的单元地 址,这时的输入将会改变原存储单元的值,造成结果混
      乱。
    • 指针变量可以有空值,即该指针变量不指向任何变量
      常用符号常量NULL表示空指针值,其实NULL代表的值 是整数0。编译系统约定0号单元不存放有效数据。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值