2016 - 2024

感恩一路有你

手机上可以用什么软件做meme 如何应对C 经典试题?

浏览量:2084 时间:2023-03-30 14:33:35 作者:采采

如何应对C 经典试题?

C/C经典面试问题

1.变量的声明和定义有什么区别?

给变量分配地址和存储空间叫定义,不分配地址叫声明。一个变量可以在多个地方声明,但只能在一个地方定义。添加extern修饰符是变量的声明,表示变量将被定义在文件外部或文件后面。

注意:很多时候,一个变量只是声明不会分配内存空间,直到被使用才会初始化,比如一个外部变量。

2.写一个比较Boolin浮点指针变量和零值的if语句。

布尔数据

If(标志)

如果(!旗帜)

Int数据:if(0!旗帜)

if(0标志)

指针数据:if(NULLflag)

如果(NUJLL!旗帜)

浮动数据:

定义范数0.00001 if(flag gt-NORM ampamp flagtnorm)

注意:在比较int、指针变量和零值的时候,要特别注意把零值放在左边,这样写错的时候,编译器就可以报错,否则这个逻辑错误不容易发现,可能会导致严重的后果。

3、sizeof和strlen的区别

sizeof和strlen是有区别的:sizeof是运算符,strlen是库函数。

Sizeof 的参数可以是数据类型或变量,而strlen只能是以 amp结尾的字符串。;0 。

编译器在编译时计算sizeof的结果,而strlen函数只能在运行时计算。sizeof计算数据类型在内存中的大小,而strlen计算字符串的实际长度。

sizeof的数组参数不会退化,传递strlen退化为指针。

注意:有些操作符看起来像函数,有些函数名看起来像操作符。这样容易混淆的名字一定要区分,否则遇到数组名等特殊数据类型作为参数时很容易出错。最容易与函数混淆的运算符是sizeof。

4,

C语言的关键字static和C的关键字static有什么区别?

在C中,static用于修改局部静态变量和外部静态变量和函数。除了上述函数,C还用于定义类的成员变量和函数,即静态成员变量和静态成员函数。

注意:static的内存和全局特性可以使不同时期调用的函数进行通信和传递信息,而C的静态成员可以在多个对象实例之间进行通信和传递信息。

5.C中的malloc和C中的new有什么区别?

马洛克new和new是有区别的:new和delete是运算符,可以重载,只能在c中使用。

Malloc,free是一个可以被覆盖的函数,在C和C中都可以使用。

New可以调用对象的构造函数,对应的delete可以调用对应的析构函数。

Malloc只分配内存,free只回收内存,不执行构造函数和析构函数。

New delete返回指向某个数据类型的指针,malloc free返回指向void的指针。

注意:malloc申请的内存空间要用fr:(b))

注意:调用时注意这个宏定义的副作用,如下。

(*p)lt(x)?(*p):(x)

p指针加了两次,违反了MIN 的初衷。

7.指针能使volatile?

8.什么?;A和ampa有什么区别?

请写出以下代码的打印输出,主要目的是调查A和ampa的区别。

# includeltstdlo.hgt

Void main()

{

Int a[5]{1,2,3,4,5}

Int *ptr(int *)(ampa 1)

Printf(";%d,%d ";,(a 1),*(ptr-1))

返回

}

产出结果:2.5

注意:数组名A可以是数组的第一个地址,ampa是数组的指针。

思考,int* ptr(int *)(ampa 1)的原始类型

当它是int *ptr(int *)(a 1)时,输出结果会是什么

9.简述C和C程序编译的内存分配。

C和C中的内存分配可以分为三种(1)从静态存储区分配:内存在程序编译时就已经分配好了,这个内存存在于程序的整个运行期,速度快,可以 不要弄错,因为有些系统会处理它,比如全局变量和静态变量。

(2)栈上分配:函数执行时,在栈上创建函数中局部变量的存储单元,这些存储单元在函数执行结束时自动释放。堆栈内存分配操作内置在处理器的指令集中,效率非常高,但分配的内存容量有限。

(3)从堆中分配:即动态内存分配。程序运行时,malloc或new用于申请任意大小的内存,程序员负责何时用free或delete释放内存。动态内存的寿命是由程序员决定的,使用起来非常灵活。如果空间是在堆上分配的,它就是负责的。回收它,否则运行的程序会有内存泄漏,另外频繁分配和释放不同大小的堆空间会产生堆碎片。

编译一个C和C程序时,内存分为五个存储区:堆区、堆栈区、全局区、文字常量区和程序代码区。

10、简述strcpy、sprintf和memecpy的区别。

它们之间的区别主要有以下几点。

(1)不同的操作对象:strcpy 的两个操作对象都是字符串,sprintf 的操作对象可以是多种数据类型,目标操作对象是一个字符串,而memcpy s的两个对象是两个可任意操作的内存地址,不限于任何数据类型。

(2)执行功能不同:strcpy主要实现字符串变量之间的复制,sprintf主要实现从其他数据类型到字符串类型的转换,memcpy主要实现内存块之间的复制。

(3)执行效率不同:memcpy最高,sprintf最低。

说明:strcpy,sprintf,memcpy都可以实现复制功能,但是要根据实际需要,针对不同的对象选择合适的函数来实现复制功能。

11、将地址为ox67a9的塑料变量的值设置为oxaa66。

Int *ptr

Ptr(int *)ox67a9

*ptroxaa66

注意:这个问题是强制类型转换的典型例子。无论什么平台,地址长度和整数数据的长度都是一样的,即一个整数数据只要有意义就可以强制转换成地址指针类型。

12、面向对象的三个特点:面向对象的三个特点是封装性、继承性和多态性。//有待完善

13.C的空类有哪些成员函数?

(1)默认构造函数

(2)默认复制构造函数

(3)默认析构函数

(4)默认赋值运算符

(5)默认地址操作符

(6)默认地址运算符const

注意:有些书只是简单介绍了前四个函数,没有提到后两个函数,但后两个函数也是空类的默认函数。另外,西医讲究的是,编译器只有在实际使用的时候才会定义这些函数。

14、谈谈你对复制构造函数和赋值运算符的理解。

复制构造函数和复制运算符重载有两个区别:(1)复制构造函数生成新的类对象,而赋值操作不能。

(2)由于复制构造函数直接构造一个新的类对象,所以在初始化这个对象之前不需要检查源对象是否与新对象相同,但是赋值运算符需要这个操作。此外,如果原始对象中的内存在赋值操作符中不匹配,则必须首先释放内存。

注意:当类中有指针类型的成员变量时,一定要重写复制构造函数和赋值操作符,而不是使用缺省值。

17.简述重写、重载和隐藏类成员函数的区别。(1)重写和重载主要有几个区别:作用域区别:重写和被重写的函数在两个类中,重载和重载的函数在同一个类中。

参数差异:重写函数和被重写函数的参数列表必须相同,但重载函数和重载函数的参数列表必须不同。

虚的区别:被重写基类中的被重写函数必须用虚来修饰,而重载函数和重载函数可以用虚来修饰,也可以不用。

(2)隐藏和重写,重载有以下区别:

不像重载的作用域,像重写,隐藏函数和隐藏函数不是一个类。

参数差异:隐藏函数和隐藏函数的参数表可以相同,也可以不同,但函数名必须相同。当参数不同时,无论基类中的参数是否被虚修饰,基类的函数都是隐藏的,而不是重写的。

注:虽然重载和覆盖都是实现多态性的基础,但两者的技术完全不同,目标也完全不同。覆盖是动态绑定的多态性,重载是静态绑定的多态性。

18简述多态实现的原理。

当编译器发现一个类中存在虚函数时,它会立即为这个类生成一个虚函数表vtable。虚函数表的每个条目都是指向相应虚函数的指针。编译器还会隐式插入一个指针vptr(对于vc编译器,它入到类的第一个位置)指向虚函数表。当调用这个类的构造函数时,编译器会隐式执行vptr和vtable的关联代码。将vptr指向相应的vtable,并将该类与该类的vtable连接起来。另外,在调用类的构造函数时,指向基类的指针现在已经变成了指向特定类的this指针,这样依靠this this指针就可以得到正确的vtable,函数体就可以真正连接起来了。这是动态绑定和多态的基本原理。

注意:一定要分清虚函数、纯虚函数和虚继承的关系和区别。牢记虚函数的实现原理,因为它是多态C面试的重要考点之一,虚函数是实现多态的基础。

19.链表和数组有什么区别?

数组和链表有几个区别:(1)存储形式:数组是一个连续的空间,声明时必须确定长度。链表是一个长度可变的不连续动态空间,每个节点都要保存相邻节点的指针。

(2)数据搜索:数组线性搜索速度快,搜索操作直接使用偏移地址,链表需要按顺序搜索节点,效率低。

(3)数据插入和删除:链表可以快速插入和删除节点,而数组可能需要大量的数据移动。

(4)越界问题:链表没有越界问题,数组有越界问题。

注意:在选择数组或链表的数据结构时,必须根据实际需要选择。数组易于查询,链表易于插入和删除。数组节省空间但长度固定,而链表变长但占用更多存储空间。

20、什么 怎么了?单个链表的顺序相反。

21.简述队列和栈的异同。

队列和栈都是线性存储结构,只是插入和删除数据的操作不同。队列是FIFO,堆栈是LIFO。

注意:为了区分堆栈区和堆区,对堆区的访问是随机的,而堆栈区是LIFO。堆栈由编译器自动分配,用于存储函数的参数值和局部变量的值。其操作类似于数据结构中的堆栈,堆一般由程序员分配和释放。如果程序员不释放,可能会在程序结束时被os回收,分配类似于链表。

它不同于本主题中的堆和堆栈。栈只是一个数据结构,堆区和栈区是程序中不同的内存存储区域。

22-28各种排序算法

谈谈你对编程规范的理解或认识。

编程规范可以概括为:程序的可行性、可读性、可移植性和可测试性。

注意:这是编程规范的概要。面试官不 t不必背诵上面给出的例子,而应该理解这些例子所说明的问题,思考如何解决可行性、可读性、可移植性和可测试性的问题,结合上面的例子和自己平时的编程习惯来回答这个问题。

这两句话有问题吗:30短i0ii 1L?

代码一是错误的,代码二十是正确的。

注意:在数据安全的情况下,将大类型数据转换为小类型数据时,必须显示强制类型转换。

什么?;31、ampamp和amp、||和|的区别是什么?

(1)amp和|对操作数求值,amp和||是判断的逻辑关系。

(2)ampamp和||不会对右操作数求值,如果可以通过判断左操作数来确定结果。

注意:编程时,有时用amp和|代替amp或||并没有错,但其逻辑是错误的,可能会导致不可预知的后果。

32C的引用和C语言的指针有什么区别?

指针和引用的区别主要有以下几点:(1)引用必须初始化,但不分配存储空间。指针在声明时被初始化,初始化时需要分配存储空间。

(2)引用初始化后不能改变,指针可以改变它所指向的对象。

(3)没有空值的引用,但是有空值的指针。

注意:引用作为函数的参数时,会产生一些问题,因为使用引用作为参数的目的是改变这个引用所指向的地址的内容,但是调用函数时是作为实参传入的,无法分辨函数的参数是普通变量还是引用,所以可能会产生错误,使用时一定要小心。

33、合适的数据结构为更好的算法设计提供了有利条件。

什么?;35typedef和define的区别是什么?

(1)不同用法:typedef用于定义数据类型的别名。为了增强程序的可读性,define主要用于定义常量,编写复杂且常用的宏

(2)执行时间不同。typedef是编译过程的一部分,具有类型检查的功能。定义是宏定义和预编译步骤。它只发生在编译之前,它只是简单地替换字符串而不进行类型检查。

(3)作用域不同:typedef受作用域限制,define不受作用域限制,只要定义声明后的引用正确。

(4)指针的操作不同,typedef和define定义的指针差别很大。

(5)注意:typedef被定义为语句,因为句末有一个加号,define不是语句。千万不要在句末加加号。

什么是关键字const?

Const用于定义只读变量或对象。主要优点:方便类型检查,可以像宏定义一样方便地修改调整参数,节省空间,避免不必要的内存分配,为函数重载提供参数。

描述:const修改函数参数,这是编程规范的要求。很好读,一眼就能知道这个参数是不能更改的,实现起来也不容易出错。

37static的作用是什么?

Static在C中主要用于定义全局静态变量、局部静态变量和静态函数。在C中,增加了两个新函数:定义静态数据成员和定义静态函数成员。

注意:由于静态定义的变量分布在静态区,所以静态定义的变量默认值为0,普通变量默认值为随机数,所以在定义指针变量时要特别注意。

什么?;Extern的作用是什么?

由Extern标识的变量或函数在其他文件中声明和定义,当遇到该变量和函数时,提示编译器在其他模块中查找定义。

39为什么流操作符重载返回一个引用

在程序中,流操作符gtgt和ltlt经常被连续使用,所以这两个操作符的返回值应该是仍然支持这两个操作符的流引用,而其他数据类型可以 不做。

注意:复制操作符和流操作符以外的一些操作符,比如-*/,一定不能返回引用,因为这个死操作符的对象都是右值,所以必须构造一个对象作为返回值。

40.简述指针常量和const指针的区别。

指针常数是指指针的定义,其值只能在定义时初始化,不能在其他地方改变。const指针是指指针的定义,指针指向只读对象,不能被const指针改变。

指针常量强调指针的不变性,而const指针强调指针对其所指对象的不变性。

注意:不管是指针常量还是const指针,它最大的用途就是作为函数的形参,保证实参在被调用的函数中。不变性。

41数组和指针的区别,也就是字符数组和字符串指针的区别

如何避免 "野生指针 "

野指针产生的原因及解决方法如下:(1)指针变量在声明时没有初始化。解决方法:指针在声明的时候初始化,可以是特定的地址值,也可以让它指向NULL。

(2)指针p被释放或删除后,不设置为空。解决方法:指针所指向的内存空间被释放后,指针应该指向NULL。

(3)指针操作超出了变量的范围。解决方法:在变量作用域结束之前释放变量的地址空间,让指针指向NULL。

注意:野指针的解决也是编程规范的基本原则。平时使用指针时,要避免产生野指针,使用前一定要检查指针的合法性。

频繁引用的作用是什么?

引入频繁引用主要是为了避免在使用变量的引用时,在不知道的情况下改变变量的值。频繁引用主要用于定义一个常用变量的只读属性的别名作为函数的传入参数,避免在调用函数中意外改变实际参数。

注意:很多情况下需要使用常量引用作为形参,引用的对象相当于常量对象,所以可以 不要改变函数中实际参数的值。这具有高可读性和低错误率的优点。

49.构造函数可以是虚函数吗?

构造者可以 不要成为虚函数,你可以 不要在构造函数中调用虚函数,因为这样你实际上执行了父类的相应函数,因为你没有 t还没有构造它,析构函数可以是一个虚函数,这在复杂的类结构中经常是必要的。析构函数也可以是纯虚函数,但纯虚函数必须有定义体,因为析构函数的调用是隐含在子类中的。描述:虚函数的动态绑定特性是实现重载的关键技术。动态绑定根据实际调用情况查询相应类的虚函数表,调用相应的虚函数。

谈谈你对面向对象的理解

面向对象可以理解为对待每一个问题,首先确定问题由几个部分组成,每个部分实际上是一个对象,然后分别设计这些对象,最后得到整个程序。传统的程序设计大多是基于功能的思想,而面向对象的程序设计是从对象的角度考虑问题。这样做可以让程序更加简洁明了。

说明:编程中应用最广泛的面向对象编程技术只是面向对象技术的一部分。发挥面向对象技术的优势是一个综合性的技术问题,不仅需要面向对象的分析、设计和编程技术,还需要必要的建模和开发工具。

田朴珺是如何红起来的?

第一张娱乐唱片必须是精品。

田朴珺,王石 她现在的妻子不受欢迎,只是因为她嫁给了60多岁的王石,她看起来有点不同。她现在最明显的标签是still "王 的女人 ",没有王石,估计。认识她的人不多。

田朴珺去了电影学院。你可以 我不能说它有多美。虽然我在电影学院学习,我还没有 t其实拍了很多作品,不是打酱油就是演跑龙套的。

演技不怎么样,但是挺有心机的,总想着怎么当 "著名 "。2004年,《韩城攻略》开幕式上,田朴珺与梁朝伟、任贤齐、舒淇、田朴珺、韩国三位女星一起合影。在照片中,我们可以看到每个人都穿得很厚。田朴珺身着低胸礼服,紧贴梁朝伟,成功抢镜,让舒淇成为众人瞩目的焦点。

自2002年以来,田朴珺一直在工作,连续拍摄了几部电影,但他没有 我找不到机会。田朴珺认为这是没有希望的。2006年,田朴珺报名参加了长江商学院的EMBA,找到了另一条路。

但田朴珺不是在商学院,而是通过冯仑认识了王石。当时,冯仑投资了一家高端旅行社,经常邀请一些企业家朋友出国旅游做主持,偶尔会有一两个陪护明星陪同。有一次,冯仑安排了一个活动。在那个旅行团里,有王石和十八线女演员田朴珺。于是他们第一次见面。

后来,他们去了哈瓦那、古巴、新西兰、巴西和省。田朴珺 的新浪微博账号叫做 "哈瓦那拿 ",而且不清楚这里面有没有寓意。

2011年,王石去了美国学习,田朴珺也去了美国学习。两者不在一个城市,车程四个小时。后来,在田朴珺 s专栏,写了一个两个人约会的故事。王石连续五天邀请田朴珺共进晚餐,但他没有。;我没有带三餐的钱。第三天,田朴珺生气了:"你太不真诚了。 "因此,王石真诚地邀请第四餐,田朴珺,谁没有 不记仇,欣然前往。而第五顿饭,他终于向田朴珺坦白了。

2012年1月29日,田朴珺经常在纽约谈论这件事,因为他不能吃红烧肉。为了解决她的 "担心想到肉和肉,王石决定给她做个红烧肉。那天中午,王石拿着IPAD研究怎么炖肉,田朴珺在旁边参谋,就这样炖了一下午,成了一锅泥。

这一年,王石与妻子王江穗离婚。

直到年底,田朴珺和王石的关系终于被一个网络大V@徽剑曝光。田朴珺也突然成了炙手可热的人物。后来,田朴珺微博被剥离:红烧肉、星座等证据也被一一曝光。

田朴珺 s在豆瓣上的自我介绍是这样写的:当代年轻跨界新女性,李成学院创始人、制片人、专栏作家、演员、室内设计师。赢得了 "年度突破女性奖联合国发布,位居女明星企业家热搜榜榜首。有很多桌子,但是没有人知道它们到底是做什么的。唯一能知道的人是王石 的妻子。

二十多年前,有一句流行语:邦达式。我想那 我是什么样的人?;我说的是。

我搜索了信息,发现田朴珺现在被标榜为一个独立的女性。性,不是靠男人,不是为了钱。我不 我不知道它是否 很有说服力,但事实并非如此。;别说服我。因为我与王石的恋情而被外人所知,现在我甚至说我不 不靠男的,便宜了还卖的好,真是奇妙的事情!

王石已经60多岁了。我不 我不知道王石是否能接受他越来越强调独立的妻子。让 s以网友的话结尾:祝他们性。

指针 变量 函数 区别

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。