0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从面试题入手,分析不同指针类型的区别

学益得智能硬件 来源:学益得智能硬件 作者:学益得智能硬件 2023-07-14 17:13 次阅读

如果你不太清楚int *和char *的区别,看完这道题,可能就会有所感悟。

1700c3f6-2226-11ee-962d-dac502259ad0.png

一个字符数组a,初始化成:

0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 然后定义三个指针,分别是:

short * int * int64 *这里把 int64 理解成 8 个字节的整数就行,不用管它是不是真的存在。

三个指针都初始化成数组名a,也就是数组第一个元素的地址,假设数组首元素地址是 0x100,那三个指针的值都是 0x100。

如果画出来,就是这样的。

17d8862e-2226-11ee-962d-dac502259ad0.png

下面就要来搞清楚 short * 和 int * 的区别。

所谓short *,表示一个指针,指向的是short类型的数据。在32位系统中,short类型占2字节,所以指针指向的是这两个字节。如果让指针加一,它也会跳过两个字节。

同理,如果是int *类型,也表示一个指针,指向int类型的数据,在32位系统中,int类型占4字节,所以指针指向的是这4个字节,如果让指针加一,他也会跳过4个字节。

再回到数组上,因为三个指针类型不同,所以指向的数据长度也不同。

接下来就是取值操作。

17d8862e-2226-11ee-962d-dac502259ad0.png

*p1就是取指针 p1 指向内存的值,但是并不能简单的认为结果是0x0102。也有可能是0x0201。

还好题目一开始说了,32位系统,小端字节序。

1895a498-2226-11ee-962d-dac502259ad0.png

所谓小端,就是高地址保存高字节。

在数组里面,下标为 0 的元素一定是低地址,所以01应该就是低字节。

于是 *p1 是 0x0201。

18cf1dc2-2226-11ee-962d-dac502259ad0.png

*(p1 + 2)应该会跳过4个字节,刚才说了,short *类型的指针,加一会跳过2个字节。所以*(p1 + 2)的结果是0x0605。

p3因为指向了8个字节,所以*p3是0x0807060504030201。

1915c8d0-2226-11ee-962d-dac502259ad0.png

最后一个*(p2 + 2),p2是int类型的指针,加2跳过了8个字节,表示的是最后4个字节的地址,取值的结果就是0。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87609
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595

原文标题:从面试题入手,分析不同指针类型的区别

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    常见的嵌入式C语言面试题

    数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考。目前有以下18道题目。
    发表于 07-18 10:46 597次阅读

    C/C++程序员应聘常见面试题深入解析

    很可能只能拿到10分中的2分。读者可从本文看到strcpy函数2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。   分析这些
    发表于 03-26 10:16

    java基础练习、面试题

    java基础练习、面试题整理了java私塾教材的课后作业,基础部分,面试中也常常遇到的基础问题,赶紧下载了。下载: [hide][/hide]
    发表于 07-16 14:02

    java经典面试题深度解析

    回答面试题Int 与Integer的区别第三节 以数据结构挖掘集合面试考点第四节 经典面试题重载与重写第五节 如何回答面试官提问Java的接
    发表于 06-20 15:16

    12个常见的C语言面试题

    12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存
    发表于 12-31 06:36

    c语言面试题,c++面试题下载

    c语言面试题,c++面试题1. static有什么用途?(请至少说明两种) 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别? 
    发表于 10-22 11:19 5次下载

    c语言面试题

    c语言面试题集(单片机)C language problem(20151125084232)
    发表于 12-18 14:05 8次下载

    c语言面试题

    c语言面试题
    发表于 11-05 16:48 0次下载

    C语言经典面试题

    面试题
    发表于 12-20 22:41 0次下载

    经典硬件面试题精选及解答

    经典硬件面试题精选及解答
    发表于 11-29 18:02 0次下载

    常见的MySQL高频面试题

    在各类技术岗位面试中,似乎 MySQL 相关问题经常被问到。无论你面试开发岗位或运维岗位,总会问几道数据库问题。经常有小伙伴私信我,询问如何应对 MySQL 面试题。其实很多面试题都是
    的头像 发表于 02-08 16:05 2080次阅读

    142道linux面试题,值得收藏

    142道linux面试题,值得收藏
    发表于 06-16 14:42 3次下载

    关于数组常见的面试题

    数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考。目前有以下18道题目。
    的头像 发表于 08-17 09:25 1215次阅读

    【C语言经典面试题】函数指针数组的定义是怎么样的?

    经典面试题,有必要了解下!
    的头像 发表于 10-05 16:35 1982次阅读
    【C语言经典<b class='flag-5'>面试题</b>】函数<b class='flag-5'>指针</b>数组的定义是怎么样的?

    分享10道有趣的嵌入式C语言面试题及答案

    10个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
    的头像 发表于 05-09 10:54 1720次阅读