0
点赞
收藏
分享

微信扫一扫

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



大家好,我是安然无虞。




文章目录

  • 每篇前言
  • ​​指针面试真题一​​
  • ​​知识点补充​​
  • ​​解题思路​​
  • ​​指针面试真题二​​
  • ​​解题思路​​
  • ​​指针面试真题三​​
  • ​​知识点补充​​
  • ​​解题思路​​
  • ​​指针面试真题四·有坑~小心​​
  • ​​知识点补充​​
  • ​​解题思路​​
  • ​​指针面试真题五​​
  • ​​知识点补充​​
  • ​​解题思路​​
  • ​​指针面试真题六​​
  • ​​解题思路​​
  • ​​指针面试真题七​​
  • ​​解题思路​​
  • ​​指针面试真题八​​
  • ​​解题思路​​
  • ​​指针面试真题九​​
  • ​​解题思路​​
  • ​​指针面试真题十​​
  • ​​知识点补充​​
  • ​​遇见安然遇见你,不负代码不负卿。​​

每篇前言

作者:安然无虞

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。

​​【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串



种一棵树最好的时间是十年前,其次是现在。各位,共勉。


指针面试真题一


给你一段代码,问程序的结果是什么?
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_数组_02这道题很简单,我相信铁子你肯定会,先自己心想答案是啥,再看我的思路哦。

知识点补充

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

解题思路

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_后端_03


指针面试真题二


已知结构体大小是20字节,问下列表达式的值分别是多少?
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c++_04

解题思路

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_05


指针面试真题三


在小端存储模式下,给出下面一段程序,问输出什么?
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_06

知识点补充

这里要补充大小端的概念:
大端字节序存储:

当一个数据的低位放到高地址处,数据的高位放到低地址处;

小端字节序存储:

当一个数据的低位放到低地址处,数据的高位放到高地址处.
这个知识点很重要,之前也多次提到过,这里我就不再重复咯,详情请看这篇文章:【校招面经】学完C语言 · 这些高频面试考点你都掌握了吧~

解题思路

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_数组_07这里再说一遍指针类型的意义
意义一:
指针类型决定了指针在解引用的时候一次能访问几个字节(也叫指针的权限)。
意义二:
指针类型决定了指针向前或向后走一步的步长(±整数),单位是字节!


指针面试真题四·有坑~小心


这道题不难,但是有坑哦,小心啦。
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c++_08

知识点补充

逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果,这里需要注意哦,每个表达式都会执行计算,只不过选用最后一个表达式的结果作为整个表达式的结果。还有很多操作符,详情请看(选看):操作符详解

解题思路

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


指针面试真题五


给出如下程序,问输出什么值?
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_10

知识点补充

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

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

解题思路

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_11


指针面试真题六


很简单的一道题:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_12

解题思路

这道题比较简单,我就不过多赘述咯。


指针面试真题七


这道题实际上是为下一题过度准备的。
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_数组_13

解题思路

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


指针面试真题八


注意哦,这道题算是这几道中难度最大的一道,但是有了前一题的思路,这道题也就不再那么难以理解。
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_后端_15

解题思路

一开始,在内存中是这么存储的:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c++_16第一个:【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_17第二个:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_数组_18第三个:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_19第四个:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_20


指针面试真题九


分析下面两段代码:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_后端_21

解题思路

首先,我们遇到这样的题目时,要学会的是断句,(也就是清楚哪两个括号相互对应),这点是非常重要的。
代码1:

(* (void(*)() )0 )();

代码分析:【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_22代码2:

void (*signal(int, void(*)(int)))(int);

代码分析:【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_23


指针面试真题十


先声明一下,下面内容在之前一篇文章中已经写过,但是由于也属于指针紧接着块内容,很重要,如果看过了可以跳过这块哦,加上去是为了给没有看过那篇文章的老铁看的,也方便我自己以后复习。


知识点补充


首先回顾一个知识点:

传统上,数组名表示首元素的地址

有两个例外:

  1. sizeof(数组名):单单一个数组名放到sizeof里面,此时的数组名表示的不再是首元素的地址,而是整个数组,计算的是整个数组的大小,单位是字节(注意这个单单!);
  2. &数组名:取出的是整个数组的地址。

好,介绍完这个知识点,那么请看下面一系列笔试题:


一、一维数组


【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_数组_24


二、字符数组


1.题型一

注意这样的一个概念:

sizeof:

  1. sizeof只关注占用空间的大小;
  2. sizeof不关注类型;
  3. sizeof是操作符

strlen():

  1. strlen()关注的是字符串中’\0’之前字符的个数;
  2. strlen()只针对于字符串;
  3. strlen()是库函数

好,请看下面的代码:

代码1:

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

代码2:

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_后端_26

这里再重点强调一下这行代码:

printf("%d\n", strlen(*arr));

strlen()需要的是一个地址,从这个地址开始向后找字符直到’\0’,统计的是’\0’之前字符的个数,但是*arr表示的是首元素,也就是’a’,这时传递给strlen()的就是’a’的ACSII值97,strlen()会把97作为起始地址来统计字符串,这样的话也就会形成内存访问冲突。

2.题型二



代码1:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_后端_27

代码2:

有了上面的经验,那么下面一定难不到你啦!

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

3.题型三

代码1:
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_29

代码2:

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_30

补充常量字符串

在指针类型中我们知道有一种指针类型是char*,它有两种使用方法:

一般使用:

#include<stdio.h>

int main()
{
char ch = 'w';
char* pc = &ch;
*pc = 'a';
printf("%c\n", ch);

return 0;
}

这种使用方法比较简单,我就不过多阐述了,看看下面这种使用方法:

#include<stdio.h>

int main()
{
char* p = "abcdef";
printf("%s\n", p);
return 0;
}

  1. 注意上面的 abcdef 是常量字符串,存储在内存的只读数据区(只读不可写)

  2. 特别容易让我们以为是把字符串 abcdef 放到字符指针 p 里了,其实本质上是把字符串 abcdef 首字符的地址放到 p 中

所以下面代码是有问题的:

#include<stdio.h>

int main()
{
char* p = "abcdef";
*p = 'w';//目的是将'a'改成'w'(bug)

return 0;
}

上面的第6行代码是错误的,因为常量字符串不可以修改,所以为避免上述错误,可将第5行代码修改为:

const char* p = "abcdef";

这样的话就会避免上述错误。

面试题:

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_c语言_31

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_数组_32解题思路:

  1. str1 和 str2 是两个字符数组,数组的操作方式是将右边的常量字符串拷贝到数组的空间中,所以它们是两块空间,只是内容相同,而作为数组名,str1 和 str2 是数组首元素的地址,所以 str1 != str2
  2. str3 和 str4 是两个字符指针,指向的是同一个常量字符串,而常量字符串存储在单独的一个内存区域(只读数据区),当几个指针指向同一个常量字符串的时候,它们实际上会指向同一块内存

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_33

三、二维数组
【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_34


遇见安然遇见你,不负代码不负卿。

多谢兄弟们 码字不易,求个三连。

【校招面经】这10道指针面试真题,快来检测自己掌握了几道。_字符串_35



举报

相关推荐

0 条评论