C++笔试面试题带答案

合集下载

c面试试题及答案

c面试试题及答案

c面试试题及答案一、自我介绍你好,我是XXX,很高兴有机会参加C面试。

我具备扎实的编程基础和丰富的项目经验,在此次面试中,我将展示我的能力和潜力。

谢谢!二、C语言基础知识1. 请解释C语言中的指针(pointer)是什么?指针是一种变量,它存储了内存地址。

通过指针,我们可以直接访问和修改内存中的数据。

指针的灵活性使得我们可以在C语言中进行高效的内存管理和操作。

2. 请描述C语言中的动态内存分配的过程及对应的函数。

动态内存分配是在程序运行时按需分配和释放内存的过程。

在C语言中,使用malloc函数动态分配内存,使用free函数释放已分配的内存。

具体分配内存的大小和释放内存的时机需要根据具体需求来决定。

3. 什么是结构体(struct)?如何定义和使用结构体?结构体是一种自定义的数据类型,它可以将不同类型的数据按照一定的组织方式打包在一起。

在C语言中,我们可以使用struct关键字定义结构体,并通过点操作符(.)来访问结构体成员。

4. C语言中的位运算符有哪些,分别用于什么场景?C语言中常用的位运算符有按位与(&)、按位或(|)、按位异或(^),它们用于对二进制数进行位级操作。

位运算可以在一些特定场景中提高程序的运行效率,如位掩码、位标记等。

三、编程题请编写一个C语言程序,实现冒泡排序算法。

```c#include <stdio.h>void bubbleSort(int arr[], int size) {int i, j, temp;for (i = 0; i < size - 1; i++) {for (j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {5, 2, 9, 3, 7};int size = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, size);printf("排序结果:");for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}return 0;}```这个程序实现了冒泡排序算法,将数组中的元素按照升序排列,并输出排序结果。

c的面试题及答案

c的面试题及答案

c的面试题及答案面试题一:请解释一下C语言的指针和引用的区别。

答案:在C语言中,指针和引用都是用来处理内存地址的。

它们的主要区别在于以下几个方面:1. 定义和使用方式:- 指针是一个变量,存储的是一个内存地址。

通过使用"*"操作符可以获取或修改该地址对应的值。

- 引用则是一个已存在对象的别名。

它在定义时需要和原对象进行绑定,并且无法更改绑定的对象。

2. 空指针和无效引用:- 指针可以被赋值为空指针(NULL)或无效的地址值,表示指针不指向任何有效的内存地址。

- 引用必须在定义时进行初始化,并且必须引用一个有效的对象。

3. 内存管理:- 指针需要显式地通过动态内存分配函数(如malloc())进行内存的分配和释放。

- 引用的内存管理则由编译器自动处理,无需手动管理。

4. 数组和函数的传递:- 指针可以用于处理数组或者作为函数的参数进行传递。

- 引用可以作为函数参数,但无法直接用于处理数组。

面试题二:请解释C语言中的堆和栈的区别。

答案:在C语言中,堆和栈是两种不同的内存分配方式,具有以下区别:1. 分配方式:- 栈是由编译器自动分配和释放的,它的空间有限,大小在编译时就已经确定。

- 堆是由程序员手动分配和释放的,它的空间相比栈更大,并且大小在运行时可动态调整。

2. 内存结构:- 栈的数据结构为“先进后出”的方式,即后进栈的数据先出栈。

- 堆则没有明确的数据结构,按照动态分配顺序分配内存。

3. 分配效率:- 栈的分配和释放速度要快于堆,因为栈只需要移动栈顶指针即可。

- 堆的分配和释放速度相对较慢,因为需要在运行时进行内存的动态分配和回收。

4. 使用方式:- 栈主要用于存储局部变量、函数调用和函数参数等数据。

- 堆主要用于存储动态分配的内存,如通过malloc()函数分配的内存块。

面试题三:请解释C语言中的宏定义和常量的区别。

答案:在C语言中,宏定义和常量都可以用来表示不可更改的值,但它们的区别如下:1. 定义方式:- 宏定义使用“#define”关键字进行定义,没有数据类型限制。

c笔试题目及答案

c笔试题目及答案

c笔试题目及答案1. 题目:以下哪个选项是C语言中的合法变量名?A. 2variableB. variable2C. _variableD. variable-2答案:C2. 题目:以下哪个关键字用于定义一个函数?A. classB. functionC. defD. int答案:D3. 题目:C语言中,哪个运算符用于将变量的值增加1?A. +=B. --C. +=D. ++答案:D4. 题目:以下哪个选项是C语言中的合法数组声明?A. int arr[10];B. int arr[];C. int arr[10] = {0};D. All of the above答案:D5. 题目:C语言中,哪个函数用于计算字符串的长度?A. strlen()B. length()C. size()D. count()答案:A6. 题目:以下哪个选项是C语言中正确的注释方式?A. // This is a single line commentB. /* This is a single line comment */C. // This is a single line comment/* This is a multi-line comment */D. All of the above答案:D7. 题目:C语言中,哪个关键字用于定义一个结构体?A. structB. classC. unionD. enum答案:A8. 题目:以下哪个选项是C语言中正确的文件包含指令?A. #include <stdio.h>B. #include "stdio.h"C. #include <stdio.h>#include "stdio.h"D. All of the above答案:A9. 题目:以下哪个选项是C语言中正确的条件语句?A. if (condition)B. switch (condition)C. case (condition)D. All of the above答案:A10. 题目:C语言中,哪个关键字用于定义一个指针?A. pointerB. ptrC. *D. reference答案:C。

c语言面试题目100及最佳答案精选全文

c语言面试题目100及最佳答案精选全文

精选全文完整版(可编辑修改)c语言面试题目及最佳答案1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。

预处理:头⼀件包含、宏替换、条件编译、删除注释编译:主要进⼀词法、语法、语义分析等,检查⼀误后将预处理好的⼀件编译成汇编⼀件。

汇编:将汇编⼀件转换成⼀进制⼀标⼀件链接:将项⼀中的各个⼀进制⼀件+所需的库+启动代码链接成可执⼀⼀件2、内存的最⼀存储单位以及内存的最⼀计量单位分别是?内存的最⼀存储单位为⼀进制位,内存的最⼀计量单位字节3、#include<> 与#include ""的区别?include<>到系统指定⼀录寻找头⼀件,#include ""先到项⼀所在⼀录寻找头⼀件,如果没有找再到系统指定的⼀录下寻找4、描述⼀下变量的命名规则变量名有字⼀、数值、下划线组成,但不能以数值开头5、变量的声明与定义有啥区别?声明变量不需要建⼀存储空间,变量的定义需要建⼀存储空间6、谈谈c语⼀中有符号和⼀符号的区别?有符号:数据的最⼀位为符号位,0表示正数,1表示负数⼀符号:数据的最⼀位不是符号位,⼀是数据的⼀部分7、谈谈计算机中补码的意义统⼀了零的编码将符号位与其他位统⼀处理将减法运算转换成加法运算8、谈谈数组的特点同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类数组的分类主要是:静态数组、动态数组两类。

静态数组:类似int arr[5];在程序运⼀就确定了数组的⼀⼀,运⼀过程不能更改数组的⼀⼀。

动态数组:主要是在堆区申请的空间,数组的⼀⼀是在程序运⼀过程中确定,可以更改数组的⼀⼀。

10、描述⼀下⼀维数组的不初始化、部分初始化、完全初始化的不同点不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0 部分初始化:未被初始化的部分⼀动补0完全初始化:如果⼀个数组全部初始化可以省略元素的个数数组的⼀⼀由初始化的个数确定11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?数组名作为类型:代表的是整个数组的⼀⼀数组名作为地址:代表的是数组⼀元素的地址对数组名取地址:代表的是数组的⼀地址12、谈谈你对⼀维数组在物理上以及逻辑上的数组维度理解⼀维数组在逻辑上是⼀维的,在物理上是⼀维的13、描述⼀下函数的定义与函数的声明的区别函数定义:是指对函数功能的确⼀,包括指定函数名、函数类型、形参及其类型、函数体等,它是⼀个完整的、独⼀的函数单位。

CPP笔试面试汇总

CPP笔试面试汇总

IT公司笔试面试题系列(一)C++笔试题1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?答案:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.2.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?在子类的空间里,有没有父类的这个函数,或者父类的私有变量? (华为笔试题)答案:只要基类在定义成员函数时已经声明了virtue关键字,在派生类实现的时候覆盖该函数时,virtue关键字可加可不加,不影响多态的实现。

子类的空间里有父类的所有变量(static除外)。

3.完成字符串拷贝可以使用sprintf、strcpy 及memcpy 函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?答案:这些函数的区别在于实现功能以及操作对象不同。

1.strcpy 函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝功能。

2.snprintf 函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。

这个函数主要用来实现(字符串或基本数据类型)向字符串的转换功能。

如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。

3.memcpy 函数顾名思义就是内存拷贝,实现将一个内存块的内容复制到另一个内存块这一功能。

内存块由其首地址以及长度确定。

程序中出现的实体对象,不论是什么类型,其最终表现就是在内存中占据一席之地(一个内存区间或块)。

因此,memcpy 的操作对象不局限于某一类数据类型,或者说可适用于任意数据类型,只要能给出对象的起始地址和内存长度信息、并且对象具有可操作性即可。

鉴于 memcpy 函数等长拷贝的特点以及数据类型代表的物理意义,memcpy 函数通常限于同种类型数据或对象之间的拷贝,其中当然也包括字符串拷贝以及基本数据类型的拷贝。

c语言笔试面试题目及答案

c语言笔试面试题目及答案

c语言笔试面试题目及答案一、概述C语言作为一种高级编程语言,具有广泛应用的特点,常常是面试中的重要内容。

本文将列举一些常见的C语言笔试面试题目,并提供相应的答案,以供参考。

二、变量与数据类型1. 请解释C语言中的变量是什么?答:变量是一种具有可变值的存储空间,用于存储和表示不同类型的数据。

2. 请列举C语言中的基本数据类型。

答:C语言中的基本数据类型包括int、float、char、double等。

3. 请解释int和float数据类型的区别。

答:int是整型数据类型,用于表示整数;float是浮点型数据类型,用于表示带有小数点的数。

4. 请解释C语言中的数组。

答:数组是由相同数据类型的元素组成的集合,通过索引来访问每个元素。

三、控制流1. 请解释C语言中的条件语句。

答:条件语句用于根据给定的条件执行不同的代码块。

常见的条件语句有if语句和switch语句。

2. 请解释for循环和while循环的区别。

答:for循环用于在已知循环次数的情况下重复执行一段代码;while循环用于在满足条件的情况下重复执行一段代码,循环次数不确定。

3. 请解释C语言中的跳转语句。

答:C语言中的跳转语句用于改变程序的执行顺序,包括break、continue和goto等。

四、函数与指针1. 请解释C语言中的函数。

答:函数是一段封装了特定功能的代码块,通过给定的输入(参数)来产生输出(返回值)。

2. 请解释C语言中的指针。

答:指针是一个变量,用于存储其他变量的内存地址。

通过指针,可以间接访问和操作该地址处的数据。

3. 请解释C语言中的递归函数。

答:递归函数是一种调用自身的函数,适用于解决可以被分解为相同问题的问题,通过不断调用自身来实现。

五、文件操作1. 请解释C语言中的文件操作。

答:文件操作用于读取和写入文件的数据,包括打开文件、读取文件内容、写入文件内容和关闭文件等步骤。

2. 请解释C语言中的文件指针。

答:文件指针是一个用于表示文件位置的指针变量,可以用于定位读写文件的位置。

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案1. 介绍C语言的基本数据类型和其范围。

C语言的基本数据类型有char、int、float和double。

它们的范围分别如下:- char: -128到127- int: -32768到32767- float: 3.4e-38到3.4e+38- double: 1.7e-308到1.7e+3082. 什么是指针(Pointer)?请解释指针的作用。

指针是一个变量,其值为另一个变量的地址。

它的作用是用于在程序中动态地分配内存、传递函数参数和实现复杂数据结构,如链表和树。

3. 请解释C语言中的自动变量和静态变量的区别。

自动变量是在函数内部声明的变量,在函数结束时会被销毁。

而静态变量是在函数内或函数外声明的变量,它的值在函数调用之间保持不变。

4. 解释什么是递归函数?递归函数是一个可以调用自身的函数。

在递归函数中,函数会反复调用自己,直到满足终止条件为止。

5. 请解释C语言中的位运算符。

C语言中的位运算符包括与(&)、或(|)、异或(^)、取反(~)、左移(<<)和右移(>>)运算符。

这些运算符用于对二进制数的位进行操作,常用于位掩码和位操作等场景。

6. 什么是结构体?结构体是一种用户自定义的数据类型,它可以包含不同类型的数据成员。

通过结构体,我们可以将多个不同的变量组合在一起,形成一个逻辑上的整体。

7. 解释C语言中的动态内存分配。

动态内存分配是指在程序运行时根据需要动态地分配内存空间。

C 语言中的动态内存分配函数包括malloc、calloc和realloc,通过这些函数可以在程序运行时根据需求分配或释放内存。

8. 请解释C语言中的头文件和库文件的作用。

头文件包含一组函数声明、宏定义和结构体声明等信息,用于在源文件中引用。

库文件则包含已编译的函数实现和数据,通过链接库文件可以在程序中使用这些函数和数据。

9. 什么是指针数组和数组指针?指针数组是一个数组,每个元素都是指针类型。

c面试题及答案

c面试题及答案

c面试题及答案1. 什么是C语言中的指针?指针是一个变量,其值为另一个变量的地址。

在C语言中,指针变量存储的是内存地址,而不是数据值。

2. 解释C语言中的数组和指针的关系。

数组名本身可以作为指向数组第一个元素的指针。

因此,数组名可以用于指针运算。

3. 如何在C语言中定义一个结构体?在C语言中,可以通过以下方式定义一个结构体:```cstruct 结构体名称 {数据类型成员1;数据类型成员2;...数据类型成员n;};```4. 描述C语言中的函数原型。

函数原型是函数声明的格式,它告诉编译器函数的名称、返回类型、参数类型和数量。

例如:```c返回类型函数名(参数类型参数1, 参数类型参数2, ...);```5. 解释C语言中的递归函数。

递归函数是一个调用自身的函数。

它必须有一个退出条件,否则会导致无限递归。

6. 如何在C语言中实现文件操作?在C语言中,可以使用标准库中的文件操作函数,如`fopen`、`fclose`、`fread`、`fwrite`等,来实现文件的打开、关闭、读取和写入。

7. 什么是C语言中的预处理器指令?预处理器指令是编译器在编译程序之前执行的命令。

常见的预处理器指令包括`#include`、`#define`、`#ifdef`等。

8. 解释C语言中的内存分配。

C语言中可以使用`malloc`和`calloc`函数从堆内存分配内存,使用`free`函数释放内存。

9. 在C语言中如何实现多线程编程?C语言可以通过使用POSIX线程(pthread)库来实现多线程编程。

10. 描述C语言中的位运算符。

位运算符包括`&`(按位与)、`|`(按位或)、`^`(按位异或)、`~`(按位取反)、`<<`(左移)、`>>`(右移)。

11. 如何在C语言中使用宏定义?宏定义是通过`#define`预处理器指令实现的。

例如:```c#define 宏名宏体```12. 解释C语言中的静态存储类别。

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案1、请填写bool , float, 指针变量与“零值”比较的if语句。

提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。

例如int 变量n 与“零值”比较的if 语句为:if ( n == 0 )if ( n != 0 )以此类推。

(1)请写出bool flag 与“零值”比较的if 语句:【标准答案】if ( flag ) if ( !flag )100 条经典C语言笔试题目(2)请写出float x 与“零值”比较的if 语句:【标准答案】const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

100 条经典C语言笔试题目(3)请写出char *p 与“零值”比较的if 语句【标准答案】if (p == NULL) if (p != NULL)2、以下为Linux下的32 位C 程序,请计算sizeof 的值。

char str[] = “Hello”;char *p = str ;i nt n = 10;请计算(1)sizeof (str ) = (2)s i zeof ( p ) =(3)sizeof ( n ) =【标准答案】(1)6、(2)4 、(3 )4(4)void Func ( char str[100]){……;}请计算sizeof( str ) =(5)void * p = malloc( 100 );请计算sizeof ( p ) =【标准答案】(4)4、(5)44、用变量a 给出下面的定义e) 一个有10个指针的数组,该指针是指向一个整型数的;f) 一个指向有10个整型数数组的指针;g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int * a[10]; f)int (*a)[10]g)int (*a)(int); h) int (*a[10])(int)5、设有以下说明和定义:typedef u nion {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too;DATE max;则语句printf("%d",sizeof(struct date)+sizeof(max)); 的执行结果是:_____【标准答案】DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20data 是一个struct, 每个变量分开占用空间. 依次为int4 +DATE20 + double8 = 32.所以结果是20 + 32 = 52.当然... 在某些16位编辑器下, int 可能是2字节,那么结果是int2 + DATE10 + double8 = 206、请问以下代码有什么问题:int main(){char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}【标准答案】没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。

C语言面试笔试题

C语言面试笔试题

C语言面试笔试题C语言面试笔试题(1)算法的时间冗杂度是指_______。

A)执行算法程序所需要的时间B)算法程序的长度C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数答案:C评析:所谓算法的时间冗杂度,是指执行算法所需要的计算工作量。

(2)以下表达中正确的选项是________。

A)线性表是线性结构 B)栈与队列是非线性结构C)线性链表是非线性结构 D)二叉树是线性结构答案:A评析:一般将数据结构分为两大类型:线性结构与非线性结构。

线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

(3)下面关于完全二叉树的表达中,错误的选项是_________。

A)除了最终一层外,每一层上的结点数均到达最大值B)可能缺少若干个左右叶子结点C)完全二叉树一般不是满二叉树D)具有结点的完全二叉树的深度为[log2n]+1答案:B评析:满二叉树指除最终一层外每一层上全部结点都有两个子结点的二叉树。

完全二叉树指除最终一层外,每一层上的结点数均到达最大值,在最终一层上只缺少右边的若干子结点(叶子结点)的二叉树。

C语言笔试题答案篇(1)结构化程序设计主要强调的是_________。

A)程序的规模 B)程序的易读性C)程序的执行效率 D)程序的可移植性答案:B评析:结构化程序设计主要强调的是结构化程序清楚易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以保证程序的正确性。

(2)在软件生命周期中,能精确地确定软件系统必需做什么和必需具备哪些功能的阶段是________。

A)概要设计 B)具体设计 C)可行性分析 D)需求分析答案:D评析:需求分析是对待开发软件提出的需求进行分析并给出具体定义,即精确地确定软件系统的功能。

编写软件规格说明书及初步的用户手册,提交评审。

(3)数据流图用于抽象描述一个软件的规律模型,数据流图由一些特定的图符构成。

以下图符名标识的图符不属于数据流图合法图符的是_________。

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案

c语言面试题目和答案1、请填写bool , float, 指针变量与“零值”比较的if语句。

提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。

例如int 变量n 与“零值”比较的if 语句为:if ( n == 0 )if ( n != 0 )以此类推。

(1)请写出bool flag 与“零值”比较的if 语句:【标准答案】if ( flag ) if ( !flag )100 条经典C语言笔试题目(2)请写出float x 与“零值”比较的if 语句:【标准答案】const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

100 条经典C语言笔试题目(3)请写出char *p 与“零值”比较的if 语句【标准答案】if (p == NULL) if (p != NULL)2、以下为Linux下的32 位C 程序,请计算sizeof 的值。

char str[] = “Hello”;char *p = str ;i nt n = 10;请计算(1)sizeof (str ) = (2)s i zeof ( p ) = (3)sizeof ( n ) =【标准答案】(1)6、(2)4 、(3 )4(4)void Func ( char str[100]){……;}请计算sizeof( str ) =(5)void * p = malloc( 100 );请计算sizeof ( p ) =【标准答案】(4)4、(5)44、用变量a 给出下面的定义e) 一个有10个指针的数组,该指针是指向一个整型数的;f) 一个指向有10个整型数数组的指针;g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int * a[10]; f)int (*a)[10]g)int (*a)(int); h) int (*a[10])(int)5、设有以下说明和定义:typedef u nion {long i; int k[5]; char c;} DATE;struct data { int cat; DATE cow; double dog;} too; DATE max;则语句printf("%d",sizeof(struct date)+sizeof(max)); 的执行结果是:_____【标准答案】DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20data 是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是20 + 32 = 52.当然... 在某些16位编辑器下, int 可能是2字节,那么结果是int2 + DATE10 + double8 = 206、请问以下代码有什么问题:int main(){char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}【标准答案】没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。

c面试题库及答案

c面试题库及答案

c面试题库及答案一. 自我介绍我叫张三,毕业于XX大学计算机科学专业。

热爱编程,并在大学期间参与了多个项目开发,积累了一定的经验。

我希望能够在贵公司实习,提升自己的技术能力并为公司做出贡献。

二. 基础知识测试1. 什么是HTTP协议?请简要说明其工作原理。

答:HTTP(Hypertext Transfer Protocol)协议是用于在Web浏览器和网站服务器之间传输超文本的通信协议。

HTTP客户端发送一个HTTP请求给服务器,服务器用HTTP响应来回应该请求。

2. 什么是SQL注入攻击?如何防范SQL注入攻击?答:SQL注入是一种常见的WEB安全漏洞,黑客通过在Web表单中输入恶意的SQL代码,使服务器误将这些恶意代码当作正常的SQL 查询语句执行,从而导致数据库被攻破。

防范SQL注入攻击的方法包括使用参数化查询、输入验证和过滤用户输入等措施。

3. 请简要说明TCP和UDP的区别。

答:TCP(Transmission Control Protocol)是一种面向连接的协议,提供可靠的数据传输,保证数据按照顺序到达目标主机。

UDP(User Datagram Protocol)是一种无连接的协议,它只是简单地将数据报从一个应用程序发送到另一个应用程序。

与TCP不同,UDP不保证数据的可靠性和顺序性。

4. 什么是RESTful API?答:REST(Representational State Transfer)是一种设计风格,用于构建网络应用程序的API。

RESTful API是符合REST原则的API,它使用HTTP协议的GET、POST、PUT和DELETE等方法来实现对资源的操作。

5. 请简要说明什么是MVC模式?答:MVC(Model-View-Controller)模式是一种软件设计架构模式。

它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。

c c 面试题及答案

c c  面试题及答案

c c 面试题及答案C C 面试题及答案1. 简介在众多的求职筛选过程中,面试一直是最重要的环节之一。

而 C 和C++ 是编程语言中的重要一环,许多企业会针对 C C 方向的职位设立相关的面试题目。

本文将为大家整理一些常见的C C 面试题及其答案,希望能够帮助到想要应聘相关职位的求职者。

2. 基础题目2.1 请解释什么是指针?指针是 C 和 C++ 语言中的一种数据类型,它存储的是内存地址。

通过指针,我们可以直接访问和修改该内存地址上的数据。

2.2 C 和 C++ 的区别是什么?C 和 C++ 都是面向过程的编程语言,但是 C++ 是在 C 语言基础上发展而来的,增加了许多面向对象的特性。

C++ 中可以使用类、继承、多态等面向对象的概念,而 C 语言中并不支持这些特性。

2.3 请解释什么是动态内存分配?动态内存分配是指在程序运行时,根据需要从计算机的堆(heap)中分配内存空间。

C 和 C++ 中提供了 `malloc()` 和 `new` 两种函数/操作符来实现动态内存分配,并通过 `free()` 和 `delete` 来释放已分配的内存。

3. 进阶题目3.1 请解释什么是运算符重载?运算符重载指的是在 C++ 中可以对已有的运算符重新定义其行为。

通过运算符重载,我们可以让同一个运算符在不同的对象上执行不同的操作,从而增加代码的灵活性与可读性。

3.2 请解释什么是虚函数?虚函数是 C++ 中一种用于实现多态性的特殊函数。

它通过在父类中声明为虚函数,即在函数原型前加上 `virtual` 关键字,在子类中对其进行重写,实现了在运行时动态绑定函数的功能。

3.3 什么是内联函数?与宏有什么区别?内联函数是一种在编译时将函数调用处直接替换为函数体的编译优化技术,可以减少函数调用的开销,提高程序执行效率。

与宏相比,内联函数在语义上与普通函数相同,可以进行类型检查以及具有作用域和命名空间的限制,更加安全可靠。

c类计算机面试题目及答案

c类计算机面试题目及答案

c类计算机面试题目及答案一、自我介绍大家好,我是一名计算机专业的申请者,非常荣幸能够参加C类计算机面试。

以下是我为大家准备的面试题目及答案。

二、编程题题目:请写出一个函数,实现两个整数相加的功能。

答案:```javapublic int add(int a, int b) {return a + b;}```题目:请写出一个函数,判断一个字符串是否为回文字符串。

答案:```javapublic boolean isPalindrome(String s) {int left = 0;int right = s.length() - 1;while (left < right) {if (s.charAt(left) != s.charAt(right)) {return false;}left++;right--;}return true;}```三、操作系统题题目:请解释进程和线程的区别。

答案:进程是指操作系统中正在执行的程序,它具有独立的内存空间和系统资源,不同进程之间是相互独立的。

线程是进程的一个执行单元,它共享进程的内存空间和系统资源。

一个进程可以包含多个线程,线程之间可以通过共享内存进行通信,但同时也增加了线程间的竞争与同步问题。

题目:请说明死锁的原因及如何避免死锁。

答案:死锁是指两个或多个进程在执行过程中,因竞争资源而造成的一种相互等待的现象,导致进程不再进行下去。

常见的死锁原因有互斥、占有和等待、不可剥夺以及环路等待。

为了避免死锁,可以采取以下方法:1. 破坏互斥条件,即允许多个进程同时访问资源。

2. 破坏占有和等待条件,即进程在请求资源时不需要持有之前已分配的资源。

3. 破坏不可剥夺条件,即允许操作系统回收进程已占有的资源。

4. 破坏环路等待条件,即对资源进行排序,按照顺序请求资源,避免产生环路等待。

四、数据库题题目:请解释索引的作用及其使用场景。

答案:索引是数据库中用于加快数据检索速度的一种数据结构。

【华为】C 面试题、笔试题及答案(经典)

【华为】C  面试题、笔试题及答案(经典)

(一) 初级题1. 什么是预编译,何时需要预编译:答:(1) 总是使用不经常改动的大型代码体(2) 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。

在这种情况下,可以将所有包含文件预编译为一个预编译头<<预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等就是为编译做的预备工作的阶段主要处理#开始的预编译指令预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

常见的预编译指令有:>>2. char * const pchar const * pconst char *p上述三个有什么区别?答:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p3.char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。

C_C语言笔试面试题目含答案

C_C语言笔试面试题目含答案

C语言试题一:单项选择题1.void Example(char acHello[]){printf("%d", sizeof(acHello));return;}void main(){char acHello[] = "hello";Example(acHello);return;}的输出是( )A 4B 5C 6 D不确定2.网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。

( )A. 正确B.错误3. int *(*ptr)();则以下叙述中正确的是( )A) ptr是指向一维组数的指针变量B) ptr是指向int型数据的指针变量C) ptr是指向函数的指针,该函数返回一个int型数据D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针4.此函数实现把32位IP地址(网络序)以字符串的方式打印出来:char *IpAddr2Str(unsigned long ulIpAddr){char szIpAddr[32];unsigned long ulLocIpAddr = ntohl(ulIpAddr);//把网络序转话为主机序(void)VOS_sprintf(szIpAddr, "%d.%d.%d.%d", ulLocIpAddr >> 24,(ulLocIpAddr >> 16) & 0xff, (ulLocIpAddr >> 8) & 0xff, ulLocIpAddr & 0xff);return szIpAddr;}下面描述正确的是():A、数组szIpAddr空间不够;B、函数返回局部数组szIpAddr变量地址;C、输出的IP地址次序颠倒;5.#define OK 0#define ERR 1#define ERROR (-1)#define BUFFER_SIZE 256char *GetMemory(unsigned long ulSize){char *pcBuf = NULL;pcBuf = (char *)malloc(ulSize);if(NULL == pcBuf){return ERROR;}return pcBuf;}void Test(void){char *pszBuf = NULL;pszBuf = GetMemory(BUFFER_SIZE);if(NULL != pszBuf){strcpy(pszBuf, "Hello World!\r\n");printf(pszBuf);free(pszBuf);}return;}如下描述正确的是:A、pszBuf指向的内存不能超过255B、GetMemory函数的异常分支返回了-1,是一个非法地址C、GetMemory中异常分支没有释放空间;D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放6、#include "stdio.h"unsigned short *Sum(unsigned char a, unsigned char b){unsigned short s = 0;s = a + b;return &s;}int main(){unsigned short *p = NULL;unsigned char a = 1, b = 2;p = Sum(a, b);printf("%u+%u", a, b);printf("=%u\n", *p);return 0;}程序执行结果是()A.1+2=0B.1+2=3C.1+2=NULLD.不可预测7、设有如下定义:BOOL gStatusA = FALSE;BOOL gStatusB = TRUE;int gVarA = 100;int gVarB = 100;则执行main函数后gVarA和gVarB的值分别为( )BOOL CheckA(){if(gStatusA){gVarA++;}else{gVarA--;}return gStatusA;}BOOL CheckB(){if(gStatusB){gVarB++;}else{gVarB--;}return gStatusB;}int main(int argc, char* argv[]){if(CheckA() && CheckB() ){printf(“Status OK”);}return 0;}A, 99和100 B, 99和101 C 99和99 D 101和998.下面的代码中,函数Test执行完毕后,希望输出无符号长整型的1。

c的笔试题及答案

c的笔试题及答案

c的笔试题及答案1. 选择题:(1)以下哪个不是C语言的关键字?A. intB. floatC. doubleD. case(2)以下哪个运算符用于判断两个值是否相等?A. ==B. !=C. >D. &&(3)在C语言中,以下哪个循环结构不会先判断条件再执行循环体?A. while循环B. do-while循环C. for循环(4)以下哪个函数用于输出字符到屏幕上?A. printf()B. scanf()C. getchar()D. putchar()2. 填空题:(1)C语言中,用于声明整型变量的关键字是______。

(2)在C语言中,条件运算符的格式为______。

(3)以下是一个典型的for循环语句:for (i = 0; i < 10; i++) {printf("%d ", i);}那么上述代码的输出结果是______。

3. 简答题:(1)请简要解释C语言的数据类型。

包括基本数据类型和派生数据类型的定义和特点。

(2)什么是函数?请简要解释函数的定义和调用,并给出一个简单的函数示例。

(3)请简要介绍一下C语言中的条件语句if-else的用法,并给出一个简单的if-else语句示例。

答案:1. (1)D;(2)A;(3)C;(4)A2. (1)int;(2)exp1 ? exp2 : exp3;(3)0 1 2 3 4 5 6 7 8 93. (1)基本数据类型:包括整型、浮点型、字符型和空类型,其定义不依赖其他数据类型;派生数据类型:包括数组、结构体和指针类型,其定义依赖于基本数据类型或其他派生数据类型。

基本数据类型具有固定的存储空间和取值范围,而派生数据类型可以根据需要组合和扩展基本数据类型。

(2)函数是一段完成特定任务的程序代码。

函数的定义包括函数头和函数体,函数头包括函数返回类型、函数名和参数列表,函数体包括函数执行的代码。

函数的调用是通过函数名和传递给函数的参数来调用的。

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案在面试过程中,了解和掌握一些常见的C语言面试题目及其最佳答案是至关重要的。

下面将介绍一百个C语言面试题目以及它们的最佳答案,帮助你更好地准备和应对C语言面试。

1. C语言的特点是什么?C语言是高级程序设计语言,具有简洁、灵活、高效等特点。

2. 什么是编译器?编译器是将高级语言源代码转换为目标代码的程序。

3. 什么是链接器?链接器是将目标代码和库文件连接起来生成可执行文件的程序。

4. C语言中的数据类型有哪些?C语言中的数据类型包括整型、浮点型、字符型、数组、指针等。

5. 请解释一下const关键字的作用。

const关键字用于定义常量,被const修饰的变量的值在程序执行过程中不能被修改。

6. 请解释一下volatile关键字的作用。

volatile关键字用于告知编译器该变量的值可能会被意外地修改,编译器不会对该变量进行优化。

7. 请解释一下static关键字的作用。

static关键字可以用于函数、变量和全局变量。

在函数中,static关键字表示该函数只能在当前源文件中使用;在变量中,static关键字表示该变量的作用域仅限于当前源文件中。

8. C语言中的自动变量和静态变量有什么区别?自动变量在函数内部声明和定义,函数调用结束后会被销毁;而静态变量在函数内部声明和定义,但具有全局生命周期,在函数调用结束后不会销毁。

9. 什么是指针?指针是存储变量内存地址的变量,可以通过指针直接访问和修改该变量的值。

10. 请解释一下指针和数组之间的关系。

指针和数组在某种程度上是等价的,数组名可以看作是指向数组第一个元素的指针。

11. 请解释一下指针的运算。

指针运算包括指针的加法和减法运算,指针加上或减去一个整数n 时,指针会向前或向后移动n个元素的位置。

12. 请解释一下指针和函数之间的关系。

指针可以作为函数的参数传递,通过指针可以改变函数外部变量的值。

13. 什么是动态内存分配?动态内存分配是在程序运行过程中根据需要分配和释放内存空间。

c面试题目及答案

c面试题目及答案

c面试题目及答案一、自我介绍大家好,我是XXX。

很高兴有机会参加C公司的面试。

我毕业于XXXX大学,专业是XXXX。

在过去的几年里,我一直从事C编程相关的工作,积累了丰富的经验和技能。

我熟悉C语言的语法和特性,能够独立完成C语言开发项目,并具备良好的沟通和团队合作能力。

我对C语言的深入理解和不断学习的态度,使我对C编程有着浓厚的兴趣和极高的热情。

希望我能通过面试,成为贵公司的一员。

二、面试题目及答案1. 什么是C语言?请简要介绍一下C语言的特点。

C语言是一种通用的高级编程语言,由贝尔实验室的丹尼斯·里奇在20世纪70年代初开发而成。

C语言具有以下特点:(1) 结构简洁清晰,具有较高的可读性;(2) 强调了程序员对细节的控制,可以直接操作内存;(3) 具有丰富的运算符和流程控制语句,方便编写复杂的逻辑;(4) 具有模块化的特性,可以通过函数进行模块划分和代码复用;(5) 支持指针操作,有利于对内存资源进行灵活管理。

2. 什么是指针?请简要描述指针在C语言中的作用。

指针是C语言的一个重要概念,它表示内存地址的值。

通过指针,我们可以直接访问和修改内存中的数据,灵活地操作内存资源。

指针在C语言中的作用主要有三个方面:(1) 通过指针,可以在函数之间传递和修改数据,使得函数之间能够更好地协作;(2) 可以通过指针进行动态内存分配和释放,使得程序能够更高效地利用内存;(3) 指针还可以用于数组和字符串的访问,提高对数据的操作效率。

3. 请解释一下C语言中的函数指针及其用途。

函数指针是指向函数的指针变量。

在C语言中,函数指针可以用来存储函数的地址,并且可以通过函数指针调用相应的函数。

函数指针的用途非常广泛,主要包括以下几个方面:(1) 可以将函数指针作为参数传递给其他函数,实现回调函数的功能;(2) 可以将函数指针作为返回值,实现函数的动态调用;(3) 可以使用函数指针数组实现函数的分发和选择;(4) 可以使用函数指针实现函数的动态绑定,提高程序的灵活性和可扩展性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.new 、 delete 、 malloc 、 free 关系delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存,new 调用构造函数。

malloc 与 free 是 C++/C 语言的标准库函数,new/delete 是 C++ 的运算符。

它们都可用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。

对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。

由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free 。

因此 C++ 语言需要一个能完成动态内存分配和初始化工作的运算符 new ,以及一个能完成清理与释放内存工作的运算符 delete 。

注意 new/delete 不是库函数。

总结:new和delete会自动调用对象的构造与析构函数而malloc与free不会;new和delete式C++运算符,而malloc和free是C/C++标准库函数。

——————————————————————————————–2.delete 与 delete [] 区别delete 只会调用一次析构函数,而 delete[] 会调用每一个成员的析构函数。

在 More Effective C++ 中有更为详细的解释:“当delete 操作符用于数组时,它为每个数组元素调用析构函数,然后调用 operatordelete 来释放内存。

” delete 与 New 配套,delete [] 与 new [] 配套MemTest*mTest1=newMemTest[10];MemTest*mTest2=newMemTest;int*pInt1=newint[10];int*pInt2=newint;delete[]pInt1; //-1-delete[]pInt2; //-2-delete[]mTest1;//-3-delete[]mTest2;//-4-在 -4- 处报错。

这就说明:对于内建简单数据类型, delete 和 delete[] 功能是相同的。

对于自定义的复杂数据类型, delete 和 delete[] 不能互用。

delete[] 删除一个数组, delete 删除一个指针简单来说,用 new 分配的内存用 delete 删除用 new[] 分配的内存用 delete[] 删除delete[] 会调用数组元素的析构函数。

内部数据类型没有析构函数,所以问题不大。

如果你在用 delete 时没用括号, delete 就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

总结: delete 只会调用一次析构函数,而 delete[] 会调用每一个成员的析构函数。

——————————————————————————————–3.C C++ JAVA 共同点,不同之处?相同点:都是面向对象的语言不同点:c/c++是编译型语言,还有一些语言完全是解释型的(如Basie),而java既是编译型的又是解释型的语言c/c++存在指针运算,Basie没有显示指针,而java有指针,但取消了指针的运算——————————————————————————————–4. 继承优缺点。

类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变父类的实现。

但是类继承也有一些不足之处。

首先,因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现。

更糟的是,父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为。

如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。

这种依赖关系限制了灵活性并最终限制了复用性。

——————————————————————————————–5.C++ 有哪些性质(面向对象特点)封装,继承和多态。

在面向对象程序设计语言中,封装是利用可重用成分构造软件系统的特性,它不仅支持系统的可重用性,而且还有利于提高系统的可扩充性;消息传递可以实现发送一个通用的消息而调用不同的方法;封装是实现信息隐蔽的一种技术,其目的是使类的定义和实现分离。

——————————————————————————————–6. 子类析构时要调用父类的析构函数吗?析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候 , 派生类的信息已经全部销毁了定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数JAVA 无析构函数深拷贝和浅拷贝——————————————————————————————–7. 多态,虚函数,纯虚函数这么一大堆名词,实际上就围绕一件事展开,就是多态,其他三个名词都是为实现C++的多态机制而提出的一些规则,下面分两部分介绍,第一部分介绍【多态】,第二部分介绍【虚函数,纯虚函数,抽象类】一【多态】多态的概念:关于多态,好几种说法,好的坏的都有,分别说一下:1 指同一个函数的多种形态。

个人认为这是一种高手中的高手喜欢的说法,对于一般开发人员是一种差的不能再差的概念,简直是对人的误导,然人很容易就靠到函数重载上了。

以下是个人认为解释的比较好的两种说法,意思大体相同:2多态是具有表现多种形态的能力的特征,在OO中是指,语言具有根据对象的类型以不同方式处理之,特别是重载方法和继承类这种形式的能力。

这种说法有点绕,仔细想想,这才是C++要告诉我们的。

3多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

多态性在Object Pascal和C++中都是通过虚函数(Virtual Function)实现的。

这种说法看来是又易懂,又全面的一种,尤其是最后一句,直接点出了虚函数与多态性的关系,如果你还是不太懂,没关系,再把3读两遍,有个印象,往后看吧。

- – - – - – - – - – - – - – - – - – - – - – - – - – - – - – -二【虚函数,纯虚函数,抽象类】多态才说了个概念,有什么用还没说就进入第二部分了?看看概念3的最后一句,虚函数就是为多态而生的,多态的作用的介绍和虚函数简直关系太大了,就放一起说吧。

多态的作用:继承是子类使用父类的方法,而多态则是父类使用子类的方法。

这是一句大白话,多态从用法上就是要用父类(确切的说是父类的对象名)去调用子类的方法,例如:【例一】class A {public:A() {}(virtual) void print() {cout << “This is A.” << endl;}};class B : public A {public:B() {}void print() {cout << “This is B.” << endl; } }; int main(int argc, char* argv[]) { B b; A a; a =b;a.print;—————————————- make1 // A &a = b;a->print();———————————-make2//A *a = new B();a->print();——————————–make3 return 0;}这将显示:This is B.如果把virtual去掉,将显示:This is A.(make1,2,3分别是对应兼容规则(后面介绍)的三种方式,调用结果是一样的)加上virtual ,多态了,B中的print被调用了,也就是可以实现父类使用子类的方法。

对多态的作用有一个初步的认识了之后,再提出更官方,也是更准确的对多态作用的描述:多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(也就是可以调用子对象中对父对象的相关函数的改进方法)。

那么上面例子中为什么去掉virtual就调用的不是B中的方法了呢,明明把B的对象赋给指针a了啊,是因为C++定义了一组对象赋值的兼容规则,就是指在公有派生的情况下,对于某些场合,一个派生类的对象可以作为基类对象来使用,具体来说,就是下面三种情形:Class A ;class B:public A1. 派生的对象可以赋给基类的对象A a;B b;a = b;2. 派生的对象可以初始化基类的引用B b;A &a = b;3. 派生的对象的地址可以赋给指向基类的指针B b;A *a = &b;或A *a = new B();由上述对象赋值兼容规则可知,一个基类的对象可兼容派生类的对象,一个基类的指针可指向派生类的对象,一个基类的引用可引用派生类的对象,于是对于通过基类的对象指针(或引用)对成员函数的调用,编译时无法确定对象的类,而只是在运行时才能确定并由此确定调用哪个类中的成员函数。

看看刚才的例子,根据兼容规则,B的对象根本就被当成了A的对象来使用,难怪B的方法不能被调用。

【例二】#includeusing namespace std;class A{public:void (virtual) print(){c out << “A print”<private:};class B : public A{public:void print(){cout << “B print”< private:};void test(A &tmpClass){tmpClass.print();}int main(void){B b;test(b);getchar();return 0;}这将显示:B print如果把virtual去掉,将显示:A print那么,为什么加了一个virtual以后就达到调用的目的了呢,多态了嘛~那么为什么加上virtual就多态了呢,我们还要介绍一个概念:联编函数的联编:在编译或运行将函数调用与相应的函数体连接在一起的过程。

1 先期联编或静态联编:在编译时就能进行函数联编称为先期联编或静态联编。

2 迟后联编或动态联编:在运行时才能进行的联编称为迟后联编或动态联编。

相关文档
最新文档