c语言面试知识点,c++语言面试

  c语言面试知识点,c++语言面试

  目录

  首先,大小端的字节顺序

  1.大小头介绍

  2.什么是大端小端?

  3.百度真题

  思考

  代码执行

  4.工作补充

  第二,深入理解静态关键词

  1 .静态修改局部变量

  2.静态修改全局变量

  3 .静态修改器函数

  三、深度切割常量关键词

  1.const修改变量

  2.常量变量可以是数组的一部分吗?

  3.const修改指针

  第四,手写字符串长度函数(strlen)

  1.方法1:普通解决方案

  2.方法2:递归方法

  3.方法3:指针-指针

  动词(verb的缩写)手写字符串复制功能(strcpy)

  六、遇见安然遇见你,不辜负守则!

  [前言]

  为了考察自己对C语言的掌握程度,我特意在论坛整理了近百篇C/C R&D方向的面授经典,发现很多知识点都是被频繁考察的。下面,我就把这些高频考点分享给大家,让铁汁同学们看看自己能答对多少题。(对了,C语言的内容其实非常多,这里的“学完C语言”只是指学完C语法之后)

  [声明]

  下面总结的内容可能并不详尽,后面还会补充。

  【注意】:博主刚刚建立了一个社区和QQ学习群,链接和二维码在最下面。欢迎加入我们!

  首先,大小end 1的字节顺序。浆液端的介绍。请看下面的代码:

  #包含stdio.h

  int main()

  {

  int a=0x11223344//以十六进制形式将其赋给

  返回0;

  }

  显然,它是以错误的顺序存储在内存中的。为什么?这里我们就来介绍一下大小头。

  2.什么是大端小端?

  大端存储:

  当数据的低位放在高位地址时,数据的高位放在低位地址;

  小端存储:

  当低位数据放在低位地址时,高位数据放在高位地址。

  比如上面的栗子:

  3.百度真题

  我们来看看15年百度的一个10分笔测吧!

  百度2015年系统工程师钢笔试题(10分):

  请简述大端和小端的概念,设计一个小程序判断当前机器的端序。

  所有的概念都在上面,请看如何设计一个小程序来判断。

  思考

  您可以定义一个整数变量并将其初始化为1,这样它到十六进制表示形式的转换就是0x00 00 00 01。如果当前机器是小端存储,那么从低位地址到高位地址是01 00 00 00;如果当前机器是大端存储,那么从低位地址到高位地址是00 00 00 01;所以区别就是一个是01,一个是00在低位地址,那么怎么判断呢?在这里,你可以使用前面的指针学习的解引用操作,但是对于整数指针,你可以一次访问4个字节,我们想要的只是读取1个字节。所以需要进行强制类型转换,将int*转换为char*类型,这样在指针解引用时,一次只能访问一个字节的内容。

  分析很简单。下面是如何编写代码:

  执行代码# includesdio.h

  int main()

  {

  int a=1;//00 00 00 01

  char * p=(char *)a;

  if (1==*p)

  {

  Printf(小端\ n );

  }

  其他

  {

  printf( big end \ n );

  }

  返回0;

  }

  上面的代码只是为了方便大家理解。其实如果给面试官看,这样写代码会很low,所以下面是完整的回答:

  #包含stdio.h

  int check_sys()

  {

  int a=1;//0x00 00 00 01

  return(*(char *)a);//返回0-大端;1-小端

  }

  int main()

  {

  int ret=check _ sys();

  if (1==ret)

  {

  Printf(小端\ n );

  }

  其他

  {

  printf( big end \ n );

  }

  返回0;

  }4.作业补充无符号int a=0x1234

  无符号字符b=a;

  在32位大端处理器中,变量B等于()

  答:0x00

  乙:0x12

  C:0x34

  D:0x1234

  //很明显,答案是A,因为实际上0x00001234是放在A里的。

  问:字符类型有什么端序问题吗?

  回答:不能,因为字符类型只有一个字节,那怎么谈字节顺序呢?

  第二,深入理解静态关键词

  整理了几百个面经,发现static、extern、const、struct等关键词。都是大部分公司考察的重点,而且考察相当频繁,其中不乏知名厂商!

  下面详细描述static关键字:

  静态——“静态”

  在C语言中,Static用于修改变量和函数。

  修改局部变量——静态局部变量修改全局变量3354静态全局变量修改函数——静态函数

  1.static修改局部变量//代码1

  #包含stdio.h

  无效测试()

  {

  int a=1;//局部变量A的作用域在test()中。当A超出范围时,它将被销毁。下次调用test()时,需要重新创建它。

  a;

  printf(%d ,a);

  }

  int main()

  {

  int I=0;

  for(I=0;i 10我)

  {

  test();

  }

  返回0;

  }

  //代码2

  #包含stdio.h

  无效测试()

  {

  //static修改局部变量a。

  静态int a=1;

  a;

  printf(%d ,a);

  }

  int main()

  {

  int I=0;

  for(I=0;我我)

  {

  test();

  }

  返回0;

  }

  看,上面两段代码几乎一样,只是第二段代码中,自定义函数test()用static修改局部变量,所以有这样的区别。

  根据代码2的结果,推断每次调用test()时,使用的A是最后一次函数调用留下的A;第二次调用test()时,因为上一次函数调用生成的A没有被销毁,所以不会再创建一个,直接跳到下一步,A。

  [敲黑板]:

  static在修改一个局部变量的时候,实际上是改变了变量的存储类型,从堆栈存储变成了静态存储,从而使得静态局部变量脱离了自己的作用域,没有被销毁,实际上相当于改变了这个变量的生命周期。

  这里补充一点知识点:

  内存是一个比较大的空间。在使用内存的时候会分为不同的功能区:堆栈区、堆区、静态区(这里直接说这个是为了更好的理解,后面会详细介绍)

  2.静态修改全局变量//代码1

  //add.c文件

  int g _ val=2018//g_val是add.c文件中定义的全局变量。

  //test.c文件

  //如果要使用其他文件(外部文件)的全局变量,应该先声明。

  extern int g _ val

  //extern是一个关键字,用来声明外部符号。

  int main()

  {

  printf(%d\n ,g _ val);

  返回0;

  }上面的程序编译正常,下面的程序不行。

  /代码2

  //add.c文件

  静态int g _ val=2018

  //test.c文件

  extern int g _ val

  int main()

  {

  printf(%d\n ,g _ val);

  返回0;

  }第二个程序编译时,会因为连接错误而报错。

  [解释]

  全局变量可以在整个项目的其他子文件中使用,因为它具有外部链接属性。什么是外部链接属性?一个变量在一个文件中定义,但它可以在另一个文件中使用(访问)。当全局变量用static修饰时。其外部链接属性成为内部链接属性;这个全局变量只能在自己的源文件内部使用,其他文件都不能再用了,因为它不再具有外部链接属性,给我们的感觉是范围变小了。此外,局部变量只有内部链接属性。

  3 .静态修改函数//代码1

  //add.c文件

  int Add(int x,int y)

  {

  返回x y;

  }

  //test.c文件

  extern int Add(int x,int y);

  int main()

  {

  printf(%d\n ,Add(2,3));

  返回0;

  }上面的程序编译正常,下面的程序编译有错误。

  //代码2

  //add.c文件

  静态int Add(int x,int y)

  {

  返回x y;

  }

  //test.c文件

  extern int Add(int x,int y);

  int main()

  {

  printf(%d\n ,Add(2,3));

  返回0;

  }编译此程序时出现连接错误。

  因为函数本身就有外链属性,所以当static修改函数时,函数本来就有外链属性,但是被static修改后,就变成了内链属性,导致这个函数只能在自己的源文件内部使用,给我们的感觉就是改变了范围。

  第三,深入剖析const关键字1.const修改变量

  【注意】:const修改的只读变量不能直接修改。

  //不能直接修改由//const修饰的只读变量。

  const int a=10

  a=20//错误

  问:被const修改的变量真的不能修改吗?

  其实const修改的变量是可以间接修改的。

  //被//const修改的变量可以被间接修改。

  const int i=10

  int * p=I;

  * p=20

  printf(%d\n ,I);//打印20

  在这种情况下,有一个问题:const修改变量的意义是什么?

  让编译器执行直接修改检查;告诉其他程(那些修改你的代码或阅读你的代码的人)不要更改这个变量。它也意味着“自我描述”

  2.常量变量可以是数组的一部分吗?const int n=10

  int arr[n]={ 0 };

  注意上面的代码在VS编译器(standard C)下直接报错了,但是在gcc(GNU extension)下可以正常编译,所以我们要把一切都和标准对齐。在这种情况下,它不能!上面的定义是错误的。

  3.const修改指针

  面试问题:const*和*const有什么区别?

  const修改指针时(有两种):

  Const放在* (const int*p)的左边,修改*p,使*p不可更改(指针指向的内容不能被指针修改),但指针变量p本身可以更改;

  Const放在* (int* const p)的右边,修改p,使p不能改变。但是*p是可以修改的。

  标题描述:

  下面哪个选项声明了一个指向char类型变量的指针p?p的值不能修改,但是p指向的变量的值可以修改?C

  a:const char * p;//const修改*p

  b:char const * p;//const修改*p

  c:char * const p;//const修改p

  d:const char * const p;//const同时修改*p和p。

  思路:其实我们一看到p的值不可修改这个标题,就应该想到const放在*的右边。

  四、手写字符串长度函数(strlen)库函数strlen()原型:

  1.方法1:普通溶液//方法1:普通方法

  int my_strlen(const char* str)

  {

  断言(str);//最好添加断言

  int count=0;

  while (*str)

  {

  数数;

  }

  返回计数;

  }2.方法2:递归方法int my_strlen(const char* str)

  {

  //查找重复:my_strlen(str 1)是原问题的重复

  //找到边界

  if (*str==\0 )

  {

  返回0;

  }

  返回my _ strlen(str 1)1;

  }3.方法3:指针-指针//方法3:指针-指针

  int my_strlen(const char* str)

  {

  断言(str);//最好添加断言

  char * end=str

  while(结束)

  {

  ;

  }

  返回end-str;

  }

  动词(verb的缩写)手写字符串复制功能(strcpy)

  //这个问题有两点需要注意:

  //首先,str1应该足够大

  //第二个是保存str1的第一个地址。

  char* my_strcpy(char* str1,const char* str2)

  {

  断言(str 1 str 2);//最好添加断言

  char * ret=str1//注意,记得保存str1的第一个地址

  while (*str1=*str2)

  {

  ;

  }

  返回ret

  }

  【敲黑板】:这个问题有两点需要注意:

  Str1应该足够大以容纳str1的第一个地址。

  六、遇见安然遇见你,不辜负守则!今天到此为止,后续会继续更新。目标大厂,从最基础的知识点入手!

  有所得,求三连~

  最近忙着复习准备期末考试,所以铁志的很多私信没有及时回复。真的很抱歉,于是我建立了一个QQ群,里面有很多资料,有C/C R&D方向的书,Java R&D方向的书,还有很多算法方面的书。欢迎你加入我们。有问题可以发到群里,我们一起讨论。总之,拒绝平躺,向大厂冲刺!

  QQ群号:926297014

  安然无恙。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: