深入理解指针1

本文介绍了C语言中指针的基本概念,包括内存地址、取地址操作符、指针变量的使用、解引用、不同类型指针的大小和权限以及指针的加减运算。通过实例分析,阐述了指针如何影响数据访问和内存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针在C语言中是一个很重要的概念.

那么什么是指针呢? 下面我们就来讨论讨论.

我们知道,计算机在处理数据时,需要的数据是在内存中读取的,而处理完数据又会放回内存当中.在计算机中,内存会被分为一个个内存单元,大小一个字节.那么每个内存单元都会有一个地址,就如同门牌号一样.

而C语言中,这个地址取了一个响当当的名字,就叫做"指针". 所以我们可以理解成 指针就是存放一个数据的地址.


下面来了解一下关于指针的操作符. 第一个是取地址操作符 '&'.  通过这个操作符可以将输入存储的地址找出来. 地址其实也是数据,所以也需要一个东西,来存储数据的地址,这个东西就叫做指针变量.

没错,就是用来存储指针的变量.

表达形式可以写成如下:

第二行代码解读如下:

先看右边:&a   说明是将一个数据的地址取出来并存起来了;

再看左边:    注意这个'*'号,  如果出现了'*'号,则说明他是一个指针变量,  而'*'号前边是int  则说明变量指向的是一个int类型的数

所以如果想存储指向其他类型的数的地址,只需要将'*'号前面的类型修改即可.

那么知道怎么存储一个地址了,那么怎么取出地址中的数据呢?

这就要请出指针相关的另一个运算符'*', 在前面给指针变量声明的时候也用到了它,而在这里它叫做解引用.就是将地址中的值解出来.表达形式:*指针变量名

如图:

其实解引用*p 和变量a本质上是一样的,*p就是找到存储a的空间并将a拿出来.所以如果对*p进行赋值,a的值也会改变.

会发现*p改变了,a也会对应改变.


指针变量的大小:

在32位平台下,地址是32个bit位,所以指针大小也是32个bit位,而 8bit = 1 Bye,  即4个字节.

同理,若是64位平台下,指针大小为8个字节

所以指针的大小与指针指向的类型是无关的,只和平台有关.


指针变量类型的意义:

上面说过,指针大小与类型是无关的,大小永远是4/8个字节,那么为什么会有各种各样类型的指针呢?

对比两段代码,第一段指针是int*, 第二段指针是char*.  而通过调试可知第一段代码中n内存中的四个字节都被修改为0, 而第二段中只有第一个字节被修改为0.

而int类型正好4个字节,char类型正好1个字节.

所以可以知道指针类型的第一个意义就是,不同的指针类型解引用之后可以访问的权限是不同的,取决于指针类型.

指针也可以进行+或者-整数运算,比如指针+1

它表示指针跳过一个所对应字节,这也和指针类型有关.

即如果指针是int*,那么它跳过的字节就是4个字节,如果是char*,就跳过1个字节,也可通过调试验证出来.

所以可以得出结论,指针的类型还决定了指针向前或者向后走一步有多大.(跳过多少字节)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值