一级指针和二级指针的一些概念

文章通过一个32位系统的示例解释了一级指针的工作原理,特别是涉及到内存中的高低位存储(大小端模式)如何影响指针读取数据。指针变量在内存中占4个字节,但根据指针类型读取数据时会有所不同。在大端模式下,低地址存储高位,在小端模式下,低地址存储低位。文章还提到了不同类型的指针在读取同一块内存时,读取的字节数不同,并讨论了指针移动和不同级别的指针(如二级指针)的行为。
摘要由CSDN通过智能技术生成

首先说一下

一级指针

int a = 0x1234;

char *p = (char *)&a;//这是一个一级指针

这个以32位系统为例,以下所有结果也是基于32bit操作系统的情况下

其中 p是指针变量 char *是指针类型

因为系统是32位的 ,32bit = 4bytes

指针变量存的是地址  系统是32位的  所以所有类型的指针变量都是4bytes,这是第一个概念

上面代码案例输出结果为0x34


#include <stdio.h>

int main()
{

    int a = 0x1234;
    char *p =(char *)&a;
    printf("%#x\n",*p);
    return 0;
}
//结果为0x34

为什么是0x34?不该是0x12么?

因为这里涉及到一个大小端的概念,不同的cpu大小端不同

大端,低地址存高位

小端,低地址存低位

低地址是什么?高低位是什么?

指针变量p它创建出来了,是不是也在内存中占了一个地址

既然是地址就是顺序排列的,可以想象一下家里的门牌号

地址从低到高排列   所以低地址从低到查,地址顺序比较小的

&a看见了p的地址就住进来了

你想看看住进来的&a长什么样子,于是你想把它读出来

因为&a太胖了是int类型的  *p是char类型的(读指针变量p里面的数据加个符号*,用*p可以读)

所以你只能看到他一部分  你只能读出来一部分

0x1234你可以理解为从低到高
1脚2腿3身4头

你是大端,你会读到它的高位也就是身子和头

0x34

你是小端,你会读到它的高位也就是脚和腿

0x12

这个是高低位,它是针对存到指针变量里面的地址的

假如*p是short类型就厉害了

可以读到0x1234   可是*p它不是short类型

指针变量p无论是什么类型大小都是4bytes,但是你要读出来数据就要用*p

*p的类型是char,p的类型是char*如果分不清可以在论坛搜搜加深了解


不同类型的指针变量,对C语言中的同一块内存进行读取的时候,读取的字节数也不同。

指针变量是p,读取时候用的*p,不要迷糊哈


同理,不同类型变量每次移动大小也不一样。

p++;
这个就是移动的意思

所以指针变量就存个地址,指针变量也就是存地址的,所以才固定大小4bytes,要想把指针存的地址全部读出来或者移动还得看指针类型

如果是二级指针呢

一级指针
char *p;
*p类型是char;
char是普通类型

二级指针
char **p;
那么*p的类型就是char *了
char *是指针类型

char *就不是普通类型了,它是指针类型

指针大小就是4bytes

所以,二级指针或者多级指针移动都是4bytes

GAME OVER

大家好 我是如梦兽  碎片时间随笔小作写的不好莫怪莫怪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值