首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

速马!|一文讲清嵌入式指针

很多刚学嵌式的小伙伴私信华妹说“指针太难了,能不能不学?”华妹的答案是:当然不能!有太多地方需要用到指针了,今天跟华妹一起来学习一下吧!

01

什么是指针?

在C语言中,操作系统屏蔽掉所有硬件存储器,为程序员提供了一个类似数组的内存空间,这个内存空间的基本单位是字节,也是程序员能够操作的基本单位。

指针就是每块基本单位大小的内存的地址,通常被叫做地址或者地址编号。将字节大小的内存分别进行编号,有助于我们对于内存的使用。

用来存放指针的变量是指针变量,这也是程序员通常所说的指针。以下所有的指针变量统称为指针。

声明指针的格式:

存储类型 指针类型 * 指针名;

举例:

02

存储类型

不单独声明时,有两种情况:

情况1:局部定义指针时,默认为auto类型。表示当进入代码块时,系统为自动变量分配内存。在块内,这些变量被定义,并被认为它是局部于本块的。当退出块时,系统释放分配给自动变量的内存,因此,变量值就丢失了。重新进入块,系统会为自动变量再次分配内存,原先的值已经没有了。

情况2:全局定义指针时,默认为extern类型。表示为该变量永久的分配存储,直到当前进程运行结束。全局变量在整个程序执行期间都是存在的。

04*号

*号有两个作用:

作用1:在定义时,和普通变量做区分,如果没有*号,那就和普通变量的定义格式一致,没有任何区别了;

作用2:在使用时,*变量名这个形式表示拿到指针保存的地址上的数据

05

指针名

指针名是一个标识符,要符合标识符的命名规范;

注:标识符的命名规范:

1. 由数字、字母、下划线组成;

2. 不能以数字开头;

3. 不能和关键字冲突,严格区分大小写。

06

指针的大小?

指针的大小和类型没有关系,和CPU的运行时的寻址位数有关系。

在32位操作系统中,32位CPU一次最大能够访问32位数据,所以指针的大小就是32位,即4字节

在64位操作系统中,64位CPU一次最大能够访问64位数据,所以指针的大小就是64位,即8字节验证:

使用64位编译器:

使用32位编译器:

07

指针类型有什么作用?

由于一个指针只能保存一个地址,一个地址仅仅代表一个字节内存,而通常情况下,程序员定义变量都不不止使用一个字节。所以如何让指针访问到占有多个字节内存的变量的其他数据,就是通过指针类型。

指针类型决定着指针一次能够访问的最大内存空间。

举例:

这是我们正常使用指针,保证使用的指针类型和保存的数据类型一致,防止数据丢失。以上示例中,指针能够正常取到变量a的4个字节内存上的所有数据。如果将上述示例修改:

由上述示例得知,当指针类型和指针所保存变量的类型不同时,不能够正常获取变量的数据,指针所获取到的数据大小由指针决定。0x78总共占1个字节,和char*类型的指针所能访问的数据长度一致。

08

如何使用指针?

指针的使用只需要记住两点:

1. 指针保存的是已定义的变量地址,不能保存未经定义的常量和地址;

2. 指针提供另一种操作变量数据的方法,主要和*号有关。

09

指针是怎么进行偏移的?

指针的偏移,就是指针的运算,指针和普通变量一样,也是可以进行运算的,但是和普通变量不一样的是,普通变量的运算是对普通变量中保存的数据继续宁运算,而指针的运算和指针类型有关。

最常使用的指针偏移操作为:p++或者p--等

示例:

由示例可以发现,对于int*类型的指针,虽然只是进行p++操作,但是真正的地址的运算却是+4,和指针类型有关。

综上所述

a. 指针保存的是地址,地址是内存中每一个字节大小空间的编号;

b. 指针的*号可以帮助指针获得指针保存地址上的数据内容;

c. 指针的类型决定指针所能够访问的内存大小,指针类型还和指针偏移有关;

d. 指针大小固定,32位系统中占4字节,64位系统中占8字节;

e. 指针不能使用常量和未使用的地址进行初始化,会出现野指针。

【End】

2023年想高薪就业的同学

一定不要错过~

点击预约

5月30日王杨老师为你一一解答

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230522A06D4300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券