指针的本质、指针变量的定义与初始化和间接寻址运算符

本文介绍了指针在C和C++中的重要性,阐述了指针作为内存地址的本质,详细讲解了指针变量的定义、初始化方法,包括直接寻址和间接寻址,并探讨了指针变量的初始化,包括置为空和指向具体变量。此外,还讨论了间接寻址运算符`*`的用法。
摘要由CSDN通过智能技术生成

前言

指针是C和Cpp的重要特色,它为程序员提供了直接访问物理内存的手段。本文介绍了指针的一些基础知识,例如 指针到底是什么?如何定义一个指针变量及初始化间接寻址运算符。如有问题,欢迎看文的小伙伴提醒博主~

正文

指针的本质

在具体讲指针的本质之前,需要从内存的结构说起。
计算机访问内存的最小单位是字节(Byte),计算机为每个字节分配了一个地址,目的是实现对字节的正确读取。
举个例子:
对于一个4G内存的计算机系统,其内存地址为0 ~ (2^32) - 1(即4 * 1024 * 1024 * 1024 ,0~FFFFFFFF)。而我们知道,变量根据其数据类型会占有的一个或者多个字节,比如int型占有4个字节。而对于编译器来说,它把第一个字节的地址视为变量的地址,具体可以看下图:
在这里插入图片描述
int型变量a占有了地址为6000-6003这4个字节。因而我们可以认为,变量a的地址就是6000。
我们还可以这么认为:
6000指向了变量a对应的存储单元!这便是指针的由来。
因而,指针的本质就是内存地址。

指针变量的定义与初始化

1. CPU访问内存的两种方式

我们先介绍CPU访问内存的两种方式,进而引入指针变量的概念:
通常CPU在访问内存的时候有两种方式:直接寻址方式间接寻址方式

  • 直接寻址方式:在编程时直接给出变量的地址

例如,对变量执行scanf(“%d”, &a),通过取地址符“&”来告诉CPU int变量a的地址,然后从键盘中输入的值将被存放进地址为6000开始的四个字节中。
在这里插入图片描述

  • 间接寻址方式:在指令中不直接给出变量的内存地址,而将该变量的地址事先存放于某寄存器或者某内存单元中,在指令中给出的是存储了该变量的地址的寄存器或变量。

例如,可以先把变量a的地址6000存放在变量p中,CPU先通过读取p的内容,然后根据p的内容来间接地访问变量a。
在这里插入图片描述
其中,上文中提到的变量p便是一个指针变量。
我们可以总结一下:指针就是地址,而指针变量是存储地址的变量。有的时候会把指针变量简称为指针,具体含义需要自己去判断一下。指针变量不仅可以存储普通变量的地址,还可以存放结构体和数组的地址。

2. 指针变量的定义

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值