【秋招】嵌入式面试八股文-C语言 数组/指针

1 数组

1.1 数组指针

  • 数组指针就是指向数组的指针,它表示的是一个指针,这个指针指向的是一个数组,它的重点是指针。 例如, int(*pa)[8] 声明了一个指针,该指针指向了一个有8个int型元素的数组下面给出一个数组指针的示例(图片点开观看会很清晰)

  • 上面程序的输出结果为 5
  • 上例中,p是一个数组指针,它指向一个包含有4个int类型数组的指针,刚开始p被初始化为指向数组b 的首地址,++p相当于把p所指向的地址向后移动4个int所占用的空间,此时p指向数组{5,6,7,8},语句 *(++p); 表示的是这个数组中第一个元素的地址(可以理解p为指向二维数组的指针,{1,2,3,4}, {5,6,7,8},{9,10,11,12}p指向的就是{1,2,3,4}的地址,*p 就是指向元素,{1,2,3,4}, **p 指向的就是1,语句**(++p)会输出这个数组的第一个元素5

1.2 指针数组

  • 指针数组表示的是一个数组,而数组中的元素是指针下面给出另外一个指针数组的示例(图片点开观看会很清晰)

  • 程序的输出结果为1234

1.3 数组下标可以为负数吗?

  • 可以,因为下标只是给出了一个与当前地址的偏移量而已,只要根据这个偏移量能定位得到目标地址即可

2 指针

2.1 函数指针

  • 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址而且函数名表示的就是这个地址既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针(图片点开观看会很清晰)

  • 这个语句就定义了一个指向函数的指针变量 p首先它是一个指针变量,所以要有一个“*”,即 (*p); 其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个 指针变量可以指向有两个参数且都是 int 型的函数所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数p 的类型为 int(*) (int,int)
  • 我们看到,函数指针的定义就是将“函数声明”中的“函数名”改成“(指针变量名)”但是这里需要注意的是:“(指针变量名)”两端的括号不能省略,括号改变了运算符的优先级如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数

  重要:最后需要注意的是,指向函数的指针变量没有 ++ 和 -- 运算(图片点开观看会很清晰)

2.2 指针函数

  • 首先它是一个函数,只不过这个函数的返回值是一个地址值函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量
  • 类型名 *函数名(函数参数列表)
  • 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”
  • “(函数参数列表)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略其示例如下:

  • 由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数即:

  • 接着再和前面的 “*” 结合,说明这个函数的返回值是一个指针由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。(图片点开观看会很清晰)

  • 共有三个学生的成绩,函数find()被定义为指针函数,其形参pointer是指针指向包含4个元素的一维数组 的指针变量pointer+n指向score的第n+1行*(pointer+1)指向第一行的第0个元素pt是一个指针变 量,它指向浮点型变量main()函数中调用find()函数,将score数组的首地址传给pointer。

2.3 数组和指针的区别与联系是什么?

(1)存储方式

  • 数组通常存储在静态存储区或栈上;指针可以随时随地地指向任意类型的内存块
  • 数组在内存中是连续存放的,开辟一块连续的内存空间数组是根据数组的下标进行访问的;指针很灵活,它可以指向任意类型的数据指针的类型说明了它所指向地址空间的内存

(2)求sizeof

  • 数组:
  • 数组所占存储空间的内存:sizeof(数组名)
  • 数组的大小:sizeof(数组名)/sizeof(数据类型)
  • 指针:
  • 在32位平台下,无论指针的类型是什么

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

双非本,211硕。本硕均为机械工程,自学嵌入式,在校招过程中拿到小米、格力、美的、比亚迪、海信、海康、大华、江波龙等offer。八股文本质是需要大家理解,因此里面的内容一定要详细、深刻!这个专栏是我个人的学习笔记总结,是对很多面试问题进行的知识点分析,专栏保证高质量,让大家可以高效率理解与吸收里面的知识点!掌握这里面的知识,面试绝对无障碍!

全部评论

相关推荐

在就业环境不是很好的情况下,计算机和通信专业其实大部分学校好一些的,就业可选性还是不少的。但是相比于大部分同学去了私企,化身无敌码农,熬鹰式编写代码,在这种工作压力下,国家电网绝对是一个不错的选择,对于大部分学生来说,工作的要求就是钱多事儿少离家近,基本还是能够够满足的,所以本文带大家简单了解下国网中计算机通信专业的一些情况。1、通信专业进入电网可以去哪些岗位?每年各省网公司都会招聘一定数量的非电气专业的新员工,有信息通信、计算机类、财务类、法务类其他工学类等,非电专业的通信类一般去什么岗位?岗位:通信类入职后一般可能去通信、调度、营销还有二次检修。主要说一下信息通信岗位,这个岗位的归属设置各地区有所不同,有的地方将其归属地调管理,有的则是独立出来成立信息通信中心(信息通信分公司),直接归地市局管理。信息通信主要包括通信调度、通信运检、通信光缆等班组。   2、计算机专业进入电网可以去哪些岗位?主要工作是运行维护网络,主机,终端几大类设备,然后根据国网信通部下发的各项规定和计划执行相关工作,如信息安全加固,等级保护等。大多时候不需要自主开发代码,但如果你有这方面能力和成果自然也是加分项。信息内网,内网维护,电脑维护等,也有可能分到通信部门,通信检修,视频会议,程控交换机,路由器等3笔试部分:(1)计算机的笔试由两部分组合,其中专业课占80%,综合部分20%。综合部分就相当于普通行测,而专业课可以称之为加强版408,也就是在考研专业课408的基础上增加了一些杂的东西,具体包括:数据结构与算法、数据库系统、操作系统、计算机组成与体系结构、信息新技术、计算机网络、软件设计与开发,其中有两门课是408之外的内容,并且有一点需要注意,虽然有几门科目相同,但是考试范围和408有较大区别(例如408的数据结构KMP算法是必考,而国网则没有要求),所以专业课就显得非常非常杂。(2)通信的笔试部分:综合部分和计算机一致20%,专业部分80%:1、通信原理、信号与系统:2、光纤通信3、数据通信网4、移动通信及其他业务系统。                   
投递国家电网等公司7个岗位
点赞 评论 收藏
分享
评论
1
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务