指针(1)

1.可以肯定的是,当创建一个变量时就是为一个变量分配一个内存空间:(也就是说:变量创建的本质其实是在内存中申请空间,向内存中申请4个字节的空间,用来存放0x11223344这个数值)

        这是一个16进制的数字,是一个int类型的,一个int类型占4个字节,而0x11223344中,一个16进制位可以翻译成4个二进制位,0x11223344一共有8个16进制位,那么它(0x11223344)就占32个二进制位,也就是4个字节,刚好对应44 33 22 11 这四个字节。

       又一个例子:

2.打印地址:用取地址操作符&即可

3.指针变量:那我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x006FFD70,这个数值有时候也是需要 存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?答案是:指针变量中。指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址

4.解引用操作符:*(间接访问操作符)

我们将地址保存起来,未来是要使⽤的,那怎么使⽤呢? 在现实⽣活中,我们使⽤地址要找到⼀个房间,在房间⾥可以拿去或者存放物品。 C语⾔中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针) 指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*)。

下⾯代码中就使⽤了解引⽤操作符, *pa 的意思就是通过pa中存放的地址,找到指向的空间, *pa其实就是a变量了;所以*pa = 0,这个操作符是把a改成了0. 有同学肯定在想,这⾥如果⽬的就是把a改成0的话,写成 a = 0; 不就完了,为啥⾮要使⽤指针呢? 其实这⾥是把a的修改交给了pa来操作,这样对a的修改,就多了⼀种的途径,写代码就会更加灵活, 后期慢慢就能理解了。

5.

6.指针类型有什么意义?为什么还要存在那么多指针类型呢?下面举出两个例子:

当进行到45行时,系统给a分配了一个地址(四个字节)为0x0093FB14,0x0093FB15,0x0093FB16,0x0093FB17。

那么接着往下进行:

当进行到48行时,由于解引用的类型是int,那么会将a的四个字节全部改为0。

而当解引用的类型是char类型时,情况就不一样了。

进行到47行时。

进行到49行时。这个代码只是将a的第一个字节改变为0

由此可见结论是:指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。 ⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节。

7.指针+-整数

来看一段代码就知道是怎么回事了。

我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。 这就是指针变量的类型差异带来的变化。指针+1,其实跳过1个指针指向的元素。指针可以+1,那也可 以-1。 结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。

int*pa: pa+1--->+1*sizeof(int)

              pa+n--->+n*sizeof(int)

char*pa: pa+1--->+1*sizeof(char)

                 pa+n--->+n*sizeof(char)

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值