【校招面经】8道指针面试真题,快来检测自己掌握了几道。

简介: 【校招面经】8道指针面试真题,快来检测自己掌握了几道。

指针面试真题一

给你一段代码,问程序的结果是什么?

1. #include<stdio.h>
2. int main()
3. {
4. int a[5] = { 1, 2, 3, 4, 5 };
5. int* ptr = (int*)(&a + 1);
6. printf("%d,%d", *(a + 1), *(ptr - 1));
7. return 0;
8. }

这道题比较简单,大家稍微思考一下应该就知道了,不理解的看下面哦!

知识点补充:

指针类型决定了指针向前或向后走一步的步长(±整数),单位是字节。详情请看我这一篇文章:

初步拿捏C指针

解题思路:

指针面试真题二

已知结构体大小是20字节,问下列表达式的值分别是多少?

1. #include<stdio.h>
2. struct Test
3. {
4.  int Num;
5.  char* pcName;
6.  short sDate;
7.  char cha[2];
8.  short sBa[4];
9. }*p;
10. //假设p 的值为0x100000。 如下表表达式的值分别为多少?
11. //已知,结构体Test类型的变量大小是20个字节
12. int main()
13. {
14.   printf("%p\n", p + 0x1);
15.   printf("%p\n", (unsigned long)p + 0x1);
16.   printf("%p\n", (unsigned int*)p + 0x1);
17.   return 0;
18. }

解题思路:

指针面试真题三

在小端存储模式下,给出下面一段程序,问输出什么?(vs2019采用的小端存储)

1. #include<stdio.h>
2. 
3. int main()
4. {
5. int a[4] = { 1, 2, 3, 4 };
6. int* ptr1 = (int*)(&a + 1);
7. int* ptr2 = (int*)((int)a + 1);
8. printf("%x,%x", ptr1[-1], *ptr2);
9. return 0;
10. }

知识点补充

这里要补充大小端的概念:

大端字节序存储:当一个数据的低位放到高地址处,数据的高位放到低地址处;

小端字节序存储:当一个数据的低位放到低地址处,数据的高位放到高地址处.

(不了解大小端存储的博主后续会出相应的内容)

解题思路

指针面试真题四

这题不难,不过有小坑哦

1. #include <stdio.h>
2. int main()
3. {
4. int a[3][2] = { (0, 1), (2, 3), (4, 5) };
5. int *p;
6.     p = a[0];
7. printf( "%d", p[0]);
8. return 0;
9. }

知识点补充

逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果,这里需要注意哦,每个表达式都会执行计算,只不过选用最后一个表达式的结果作为整个表达式的结果。了解更多,点击博主的这篇文章:对C语言操作符的再认识

解题思路

指针面试真题五

给出如下程序,问输出什么值?

1. #include<stdio.h>
2. int main()
3. {
4. int a[5][5];
5. int(*p)[4];
6.     p = a;
7. printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
8. return 0;
9. }

知识点补充

指针-指针:

注意哦,使用指针-指针运算的时候,前提是两个指针指向的是同一块内存空间,那何为指向同一块内存空间呢?最典型的例子就是数组。

指针-指针其实表示的是两个指针中间的元素个数,注意哦,不是中间有几个字节。

指针面试真题六

很简单的一道题:

1. #include<stdio.h>
2. int main()
3. {
4. int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
5. int* ptr1 = (int*)(&aa + 1);
6. int* ptr2 = (int*)(*(aa + 1));
7. printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
8. return 0;
9. }

解题思路

指针面试真题七

这道题实际上是为下一题过度准备的。

1. #include <stdio.h>
2. int main()
3. {
4.  char* a[] = { "work","at","alibaba" };
5.  char** pa = a;
6.  pa++;
7.  printf("%s\n", *pa);
8.  return 0;
9. }

解题思路

指针面试真题八

注意哦,这道题算是这几道中难度最大的一道,但是有了前一题的思路,这道题也就不再那么难以理解。

1. #include<stdio.h>
2. int main()
3. {
4.  char* c[] = { "ENTER","NEW","POINT","FIRST" };
5.  char** cp[] = { c + 3,c + 2,c + 1,c };
6.  char*** cpp = cp;
7.  printf("%s\n", **++cpp);
8.  printf("%s\n", *-- * ++cpp + 3);
9.  printf("%s\n", *cpp[-2] + 3);
10.   printf("%s\n", cpp[-1][-1] + 1);
11.   return 0;
12. }

解题思路

一开始,在内存中是这么存储的:

相关文章
|
6月前
|
C++
C/C++工程师面试题(指针篇)
C/C++工程师面试题(指针篇)
98 0
|
4月前
|
存储 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
63 0
|
1月前
|
编译器 C语言
经典左旋,指针面试题
文章介绍了两种C语言实现字符串左旋的方法,以及如何使用C语言对整数数组进行奇偶数排序。通过实例演示了如何使用函数reverse_part和leftRound,以及在swap_arr中实现数组元素的重新排列。
26 0
|
1月前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
6月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
6月前
|
Java Go
Golang深入浅出之-Go语言指针面试必知:理解与使用指针
【4月更文挑战第21天】Go语言中的指针允许直接操作内存,常用于高效数据共享和传递。本文介绍了指针的基础知识,如声明、初始化和解引用,以及作为函数参数使用。此外,讨论了`new()`与`make()`的区别和内存逃逸分析。在结构体上下文中,指针用于减少复制开销和直接修改对象。理解指针与内存管理、结构体的关系及常见易错点,对于面试和编写高性能Go代码至关重要。
87 2
|
6月前
|
数据采集 Python
matlab疲劳驾驶检测项目,Python高级面试framework
matlab疲劳驾驶检测项目,Python高级面试framework
|
6月前
|
Android开发
71,字节跳动历年校招Android面试真题解析
71,字节跳动历年校招Android面试真题解析
|
6月前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
6月前
|
编解码 缓存 安全
【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?
【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?
83 1
下一篇
无影云桌面