指针(1)

今天我们来学习指针。

地址和指针变量

1.地址

在scanf的使用中,我们都会使用&符号,用来调取地址。&是取地址操作符,由于一个变量的地址是连续的,所以只需要取变量第一个字节的地址。在c语言中我们给地址一个新的名字,即指针。创建变量的实质是向内存申请空间,而这个空间的编号就是其指针(地址)。

这里我们创建了一个变量来观察a的地址,地址实际上是二进制数据,而在vs2022中为了方便展示从而写成了16进制。

2.指针变量

如图中第四行所示,我创建了一个指针变量。额外说明一点就是pa表示的是a的地址,而pa的创建同样需要申请空间,也会有自己的地址。

其中pa:为变量存放地址

int*整体:pa是整型的指针变量;

int:pa指向的是整型;

*:pa是一个指针变量;

解引用

上面我们将a的地址存放在了指针变量pa中,那么我们如何将a拿出来呢 ?

如图所示,,我们会用到解引用操作符*(单目),*pa是解引用操作,表示将a重新拿出来赋值。此时打印出来a便不再是0,而是314。 

指针变量的大小

c语言中一个整型为4个字节,一个字符为1个字节...那指针变量也会有自己的大小。实际上指针变量的大小就是指地址的存放需要多大的空间,与平台有关而与其指向的类型无关。在32位机器上,地址线有32根,32个0/1组成二进制序列,占32个比特位,即4个字节。在64位机器上,地址线有64根,64个0/1组成二进制序列,占64个比特位,即8个字节。所以指针变量的大小只可能是4字节或者8字节。

指针类型的意义

1.指针的解引用

指针的类型决定了指针解引用的时候能访问多少个字节。如下。

我们可以发现当指针类型为int*时,可以改变四个字节位,而当指针类型为char*时,只能改变一个字节位,这就反应出指针类型的意义了,即不同的指针类型在解引用时所提供的字节访问权限有区别。 

2.指针的加减

同样的,指针类型决定了指针在加减时所偏移的量,如int*+1地址就偏移四个字节,char*+1地址就偏移一个字节。 

void*类型的指针

void*类型的指针是指无明确类型的指针,在函数传参的时候他可以接受任意类型的指针。局限是无法对其进行解引用

指针运算

指针加减整数

指针减指针

两指针相减这两指针一定是指向同一区域;两指针相减的绝对值等于两指针间元素的个数。 

指针的关系运算

数组的指针是有高低的,我们将此作为判断的依据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值