为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第十九天一级指针的简介

标签:
C 嵌入式

课程内容:

一级指针简介

数据类型

nt m = 20;

int *p = &m;

指针变量p本身的数据类型:int *

指针变量保存的对象的数据类型: int

大小端模式

大端模式: ARM, 摩托罗拉

内存的高地址存储数据的低位,内存的低地址存储数据的高位。

(低地址存高位—低对高)

小端模式: intel,MIPS

内存的低地址存储数据的低位,内存的高地址存储数据的高位。

(低地址存低位—低对低)

代码示例

int x = 0x12345678; //1个十六进制数 = 4个二进制数

为什么一个十六进制=4个二进制

十六进制的进位是16

二进制的进位是2

2连续进位4次才是十六进制

2_2_2*2

// 123 左边为高位,右边为低位。

//1bytes = 8个二进制数

// 1bytes = 2个十六进制数

低地址

小端模式 大端模式

0xdff30 0x78 0x12 <------

0xdff31 0x56 0x34

0xdff32 0x34 0x56

0xdff33 0x12 0x78

高地址

指针的结论

结论一

在32bit的操作系统中,所有类型的指针变量都是4bytes. [因为地址为4bytes]

1bytes=8bit

4个字节是32bit

所有类型的指针变量包括:

char *x;

short *y;

int *z;

用32bit编译器编译方法

gcc -m32 03-pointer.c //-m32以32bit编译器来编译,方便讲解

结论二

不同类型的指针变量,对C语言中的同一块内存进行读取的时候,每次读取的字节数不同。(读取为指针变量 + *,剩下数据类型的大小)

int a = 0x12345678; (ubuntu默认小端模式)

char *p = (char *)&a;

short *q = (short *)&a;

int *m = &a;

*p; //读取变量a的1bytes数据

*q; //读取变量a的2bytes数据

*m; //读取变量a的4bytes数据

结论三

在32bit的操作系统中,不同类型的指针变量每次的移动大小不一样。(每次移动的大小为指针变量 + *,剩下数据类型的大小)

int a = 0x12345678;

char *p = (char *)a;

short *q = (short *)a;

int *m = a;

p++; //每次移动1bytes的大小

q++; //每次移动2bytes的大小

m++; //每次移动4bytes的大小

总结

示例

char *p

指针类型

char *

指针变量

p

解析

根据指针的类型读写字节

由于地址大小是固定的,所以指针变量大小固定,因为指针变量用来存放地址

但是通过指针来访问内存的时候,根据指针的类型大小来访问

这也是为什么要定义不同类型指针的原因

你想通过指针来访问内存,你就需要先确定你想访问的大小

根据访问的大小来定义你的指针类型

学习收获:

通过本章学习知道了指针变量就存个地址,指针变量也就是存地址的,所以才固定大小,要想把指针存的地址全部读出来还得看指针类型

之前还没两个结论搞混了 问了一下老师清楚了

截图打卡:

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消