c/c++指针详解

仔细解释下c和c++指针的相关问题
摘要由CSDN通过智能技术生成

指针详解

7.1 指针的概述

7.1.1 内存

内存含义:

l 存储器:计算机的组成中,用来存储程序和数据,辅助CPU进行运算处理的重要部分。

l 内存:内部存贮器,暂存程序/数据——掉电丢失 SRAM、DRAM、DDR、DDR2、DDR3。

l 外存:外部存储器,长时间保存程序/数据—掉电不丢ROM、ERRROM、FLASH(NAND、NOR)、硬盘、光盘。

内存是沟通CPU与硬盘的桥梁:

l 暂存放CPU中的运算数据

l 暂存与硬盘等外部存储器交换的数据

7.1.2 物理存储器和存储地址空间

有关内存的两个概念:物理存储器和存储地址空间。 物理存储器:实际存在的具体存储器芯片。

l 主板上装插的内存条

l 显示卡上的显示RAM芯片

l 各种适配卡上的RAM芯片和ROM芯片

存储地址空间:对存储器编码的范围。我们在软件上常说的内存是指这一层含义。

l 编码:对每个物理存储单元(一个字节)分配一个号码

l 寻址:可以根据分配的号码找到相应的存储单元,完成数据的读写

7.1.3 内存地址

l 将内存抽象成一个很大的一维字符数组。(因为每个空间占一字节,这和字符相同)

l 编码就是对内存的每一个字节分配一个32位或64位的编号(与32位或者64位处理器相关)。

l 这个内存编号我们称之为内存地址。

内存中的每一个数据都会分配相应的地址:

l char:占一个字节分配一个地址

l int: 占四个字节分配四个地址 l float、struct、函数、数组等

 

7.1.4 指针和指针变量

l 内存区的每一个字节都有一个编号,这就是“地址”。

l 如果在程序中定义了一个变量,在对程序进行编译或运行时,系统就会给这个变量分配内存单元,并确定它的内存地址(编号)

l 指针的实质就是内存“地址”。指针就是地址,地址就是指针

l 指针是内存单元的编号,指针变量是存放地址的变量。

l 通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。

 

7.2 指针的基本概念

指针的作用: 可以通过指针间接访问内存 注意:

1. 内存编号是从0开始记录的,一般用十六进制数字表示

2. 可以利用指针变量保存地址

7.3 指针变量的定义和使用

指针变量定义语法: 数据类型 * 变量名;

举例:

#include <iostream>

using namespace std;

int main070301()

{

    int a = 10; //定义整型变量a

    int* p = NULL; //定义一个指针

    //int*代表一种数据类型,int*是指针类型,p是变量名

    //指针变量赋值

    p = &a;

    cout << p << endl;

    cout << &a << endl;

    //指针的使用

    //通过*操作指针变量指向的内存

    cout << "*p = " << *p << endl; //解引用,*叫做取值运算

    *p = 20;

    cout << a << endl;

    return EXIT_SUCCESS;

}

注意:

&可以取得一个变量在内存中的地址。但是,不能取寄存器变量,因为寄存器变量不在内存里,而在CPU里面,所以 是没有地址的。

示例2:通过指针间接修改变量的值

int main()

{

    int a = 0;

    int b = 11;

   

int* p = &a; *p = 100;

    cout << "a= " << a << ", *p= " << *p << endl;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值