【秋招】嵌入式面试八股文-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
8
分享

创作者周榜

更多
牛客网
牛客企业服务