C语言面试题(第一部分)(2024年收集更新)
2024年收集更新的C语言面试题(第一部分),最新最常见的 C语言编程面试问题和答案。
C语言是一种中级和过程编程语言。 过程编程语言也称为结构化编程语言,是一种将大型程序分解为较小模块的技术,每个模块都使用结构化代码。 这种技术可以最大限度地减少错误和误解。C语言被认为是其他编程语言的基础,这就是为什么它被称为母语。可以通过以下方式定义:母语系统编程语言面向过程的编程语言结构化编程语言中级编程语言...
完整答案
C语言被称为母语,因为大多数编译器和 JVM 都是用 C 语言编写的。 大多数在 C 语言之后开发的语言都大量借鉴了它,如 C、Python、Rust、javascript 等。它引入了这些语言中使用的数组、函数、文件处理等新的核心概念。 ...
完整答案
C语言被称为中级编程语言,因为它绑定了低级和高级编程语言。 我们可以使用 C 语言作为系统编程来开发操作系统,也可以使用应用程序编程来生成菜单驱动的客户驱动计费系统。
完整答案
丹尼斯·里奇(Dennis Ritchie)
完整答案
C语言是 1972 年在 AT&T 的贝尔实验室开发的。
完整答案
C语言的主要特点如下:简单:C语言是一门简单的语言,因为它遵循结构化方法,即,程序被分成几部分可移植性:C语言具有高度可移植性,这意味着一旦编写了程序,就可以在任何机器上运行,只需很少或无需修改。中级:C语言是一种中级编程语言,因为它结合了低级语言和高级语言的特性。结构化:C语言是一种结构化语言,因为 C 程序被分成多个部分。速度快:C语言非常快,因为它使用了一组强大的数据类型和运算符。内存管理:C语言提供了一个内置的内存功能,可以节省内存并提高我们程序的效率。可扩展:C语言是一种可扩展的语言,...
完整答案
printf:printf 函数用于将整数、字符、浮点数和字符串值打印到屏幕上。以下是格式说明符:%d:它是用于打印整数值的格式说明符。%s:它是用于打印字符串的格式说明符。%c:它是用于显示字符值的格式说明符。%f:它是用于显示浮点值的格式说明符。scanf:scanf 函数用于接收用户的输入。...
完整答案
以下是局部变量和全局变量之间的区别:
比较项目
局部变量
全局变量
声明
在函数或块中声明的变量称为局部变量。
在函数或块之外声明的变量称为全局变量。
范围
变量的范围在声明它们的函数中可用。
变量的范围在整个程序中都是可用的。
访问
变量只能被声明它们的函数内的那些语句访问。
整个程序中的任何语句都可以访问变量。
生命周期
变量生命周期是在进入功能块时创建并在退出时销毁。
在程序执行之前,变量的生命周期一直存在。
存储
除非指定,否则变量存储在堆栈中。
编译器决...
完整答案
以下是静态变量的用法:声明为静态的变量称为静态变量。 静态变量在多个函数调用之间保留其值。使用静态变量是因为静态变量的作用域在整个程序中都是可用的。 因此可以在程序的任何位置访问静态变量。静态变量最初初始化为零。 如果我们更新变量的值,则分配更新的值。静态变量用作所有方法共享的公共值。静态变量在内存堆中只初始化一次,以减少内存使用。...
完整答案
C语言函数的用途是:C语言函数用于避免在程序中一次又一次地重写相同的代码。C语言函数可以从程序的任何位置调用任意次数。当一个程序被划分为函数时,那么程序的任何部分都可以很容易地被跟踪。C语言函数提供了可重用性概念,即将大任务分解为小任务,从而使 C 程序更易于理解。...
完整答案
以下是按值调用和按引用调用之间的区别:
按值调用
按引用调用
说明
当值的副本传递给函数时,原始值不会被修改。
当将值的副本传递给函数时,会修改原始值。
内存位置
实际参数和形式参数在不同的内存位置创建。
实际参数和形式参数在同一内存位置创建。
安全性
在这种情况下,实际参数仍然是安全的,因为它们不能被修改。
在这种情况下,实际参数不可靠,因为它们已被修改。
参数
实际参数的副本被传递给形式参数。
实际参数的地址被传递给它们各自的形式参数。
按值调用的示例:
#...
完整答案
当一个函数调用自己时,这个过程称为递归。 调用自身的函数称为递归函数。递归函数分为两个阶段:
绕组阶段:当递归函数调用自身时,当达到条件时此阶段结束。放卷阶段:当条件达到时展开阶段开始,控制返回到原来的调用。
递归示例
#include <stdio.h>
int calculate_fact(int);
int main()
{
int n=5,f;
f=calculate_fact(n); // calling a function
printf(...
完整答案
数组是一组相似类型的元素。 它有一个连续的内存位置。 它使代码优化,易于遍历和易于排序。 数组的大小和类型在声明后不能更改。
数组有两种类型:一维数组:一维数组是一个依次存储元素的数组。语法 -
data_type array_name[size];
多维数组:多维数组是包含多个数组的数组。语法 -
data_type array_name[size];
示例代码 -
#include <stdio.h>
int main()
{
int arr[5]={...
完整答案
指针是一个变量,它引用一个值的地址。 它使代码优化并提高性能。 每当在程序中声明变量时,系统都会为变量分配一些内存。 内存包含一些地址编号。 保存此地址号的变量称为指针变量。
实例:
data_type *p;
上面的语法中, p 是一个指针变量,它保存给定数据类型值的地址号。
指针示例代码
#include <stdio.h>
int main()
{
int *p; //pointer of type integer.
int a=5;
p...
完整答案
不引用任何值地址但为 NULL 的指针称为 NULL 指针。 当我们将0值分配给任何类型的指针时,它就会变成 NULL 指针。
完整答案
可以访问 RAM 的所有 16 个段(整个驻留内存)的指针称为远指针。 远指针是一个 32 位指针,它在给定节中获取内存之外的信息。
完整答案
如果一个指针指向任何内存位置,但同时另一个指针删除了第一个指针占用的内存,而第一个指针仍然指向该内存位置,则第一个指针将被称为悬空指针。 这个问题被称为悬空指针问题。当一个对象被删除而不修改指针的值时,就会出现悬空指针。 指针指向释放的内存。通过一个例子来看看 -
#include<stdio.h>
void main()
{
int *ptr = malloc(constant value); //allocating a memory space. ...
完整答案
指针的指针概念:一个指针指的是另一个指针的地址。 指向指针的指针是一个指针链。 通常,指针包含变量的地址。 指向指针的指针包含第一个指针的地址。 让我们通过一个例子来理解这个概念:
#include <stdio.h>
int main()
{
int a=10;
int *ptr,**pptr; // *ptr is a pointer and **pptr is a double pointer.
ptr=&a;
...
完整答案
静态内存分配是:
在静态内存分配的情况下,内存是在编译时分配的,执行程序时不能增加内存。 它在数组中使用。静态内存中变量的生命周期就是程序的生命周期。静态内存是使用 static 关键字分配的。静态内存是使用堆栈或堆实现的。需要指针才能访问静态内存中的变量。静态内存比动态内存快。在静态内存中,需要更多的内存空间来存储变量。
示例代码 -
int a[10];
上面的例子创建了一个整数类型的数组,数组的大小是固定的,即 10。...
完整答案
动态内存分配是:
在动态内存分配的情况下,内存是在运行时分配的,内存可以在执行程序时增加。 它用于链表。使用 malloc() 或 calloc() 函数需要在运行时分配内存。内存的分配或释放是在程序执行时完成的。访问内存不需要动态指针。动态内存是使用数据段实现的。存储变量所需的内存空间更少。
示例代码-
int *p= malloc(sizeof(int)*10);
上面的示例在运行时分配内存。
...
完整答案
C语言动态内存分配的函数有:
1. malloc()
malloc() 函数用于在程序执行期间分配内存。它不初始化内存,但携带垃圾值。如果无法分配请求的空间,则返回空指针。语法:ptr = (cast-type*) malloc(byte-size) // allocating the memory using malloc() function.
2. calloc()calloc() 与 malloc() 函数相同,但区别仅在于它用零值初始化内存。语法:
ptr = (cast-typ...
完整答案
malloc() 和 calloc() 的区别如下:
对比项
calloc()
malloc()
描述
malloc()函数分配了一个请求的内存块。
calloc()函数分配多个请求的内存块。
初始化
它将内存的内容初始化为零。
它不初始化内存的内容,所以它带有垃圾值。
参数的数量
它包括两个参数。
它只由一个参数组成。
返回值
它返回一个指向所分配内存的指针。
它返回一个指向已分配内存的指针。
...
完整答案
C语言中结构是:
结构是一种用户定义的数据类型,允许在一个单元中存储多种类型的数据。它占据了所有成员的内存之和。结构成员只能通过结构变量来访问。结构变量访问同一结构,但为每个变量分配的内存将是不同的。
语法:
struct structure_name
{
Member_variable1;
Member_variable2
.
.
}[structure variables];
示例代码:
#include <stdio.h>
struct s...
完整答案
C语言联合体是一种用户定义的数据类型,允许在一个单元中存储多种类型的数据。然而,它并不占用所有成员的内存之和。它只保存最大成员的内存。在union中,一次只能访问一个变量,因为它为 union 的所有成员分配了一个公共空间。
联合体的语法:
union union_name
{
Member_variable1;
Member_variable2;
.
.
Member_variable n;
}[union variables];
示例代码:
#include&l...
完整答案
在C语言中,每个函数的局部变量都被称为自动(auto)变量。在函数块内部声明的变量被称为局部变量。本地变量也被称为自动变量。在变量的数据类型前使用auto关键字是可选的。如果本地变量中没有存储任何值,那么它就由一个垃圾值组成。
...
完整答案
sprintf()代表 “字符串打印(string print)”。sprintf()函数并不在控制台屏幕上打印输出。它将数据传输到缓冲区。它返回字符串中存在的总字符数。
语法:
int sprintf ( char * str, const char * format, ... );
sprintf示例代码:
#include<stdio.h>
int main()
{
char a[20];
int n=sprintf(a,"Yiibai&quo...
完整答案
是的,我们可以编译,但不能执行。但是,如果使用#define,就可以在不使用main()函数的情况下编译和运行一个C语言程序。示例:
#include<stdio.h>
#define start main
void start() {
printf("Hello");
}
...
完整答案
Token是一个标识符。它可以是常量、关键字、字符串字面等。一个令牌是程序中最小的独立单元。C语言有以下标记。
标识符 - 标识符指的是变量的名称。关键词 - 关键词是指由编译器解释的预定义词。常量 - 常量是固定值,在程序执行过程中不能改变。操作符 - 操作符是一个执行特定操作的符号。特殊字符 - 字母和数字外的所有字符都被视为特殊字符。
...
完整答案
执行程序时传递给main()函数的参数被称为命令行参数。比如说:
main(int count, char *args[]){
//code to be executed
}
完整答案
ANSI是 “American National Standard Institute”的缩写,中文翻译为:美国国家标准协会 。它是一个维护广泛的学科的组织,包括摄影胶片、计算机语言、数据编码、机械零件、安全和其他。
完整答案
getch()函数从键盘上读取一个字符。它不使用任何缓冲区,所以输入的数据不会显示在输出屏幕上。getche()函数从关键词中读取一个字符,但数据会显示在输出屏幕上。按Alt+f5可以看到输入的字符。让我们看一个简单的例子 -
#include<stdio.h>
#include<conio.h>
int main()
{
char ch;
printf("Enter a character ");
ch=getch(...
完整答案
换行转义序列用"
"表示。它在输出屏幕上插入一个新行。
完整答案
Brain Kernighan
完整答案
一个虚拟地址是由选择器和偏移量组成的。近指针没有明确的选择器,而远指针和巨大指针有明确的选择器。当在远指针上进行指针算术时,选择器不会被修改,但在巨大指针的情况下,它可以被修改。这些都是非标准的关键字和特定的实现。这些在现代平台上是不相关的。
...
完整答案
理想情况下是32个字符,但要具体实施。
完整答案
类型转换是将一种数据类型转换为另一种数据类型的过程,这个过程称为类型转换。如果想将float类型的值存储为int类型,那么将明确地将该数据类型转换为另一种数据类型。
语法
(type_name) expression;
...
完整答案
在C语言中,fopen()函数用于打开文件,而fclose()则用于关闭文件。
完整答案
当然可以。通过将数组的基地址保存为一个指针,可以使用指针访问数组。
完整答案
一个连续运行了无限次的循环被称为无限循环。
无限的For循环示例:
for(;;){
//code to be executed
}
无限的while循环示例:
while(1){
//code to be executed
}
无限的do-while循环示例:
do{
//code to be executed
}while(1);
...
完整答案
参考下面示例代码:
#include<stdio.h>
void main(){
if(printf("hello world")){} // It prints the ?hello world? on the screen.
}
完整答案
参考下面实现代码:
#include<stdio.h>
#include<conio.h>
main()
{
int a=10, b=20; //declaration of variables.
clrscr(); //It clears the screen.
printf("Before swap a=%d b=%d",a,b);
...
完整答案
参考以下代码实现:
#include<stdio.h>
#include<conio.h>
void printFibonacci(int n) // function to calculate the fibonacci series of a given number.
{
static int n1=0,n2=1,n3; // declaration of static variables.
if(n>...
完整答案
参考以下代码实现:
#include<stdio.h>
#include<conio.h>
void main()
{
int n,i,m=0,flag=0; //declaration of variables.
clrscr(); //It clears the screen.
printf("Enter the number to check prime:"...
完整答案
参考实现代码如下:
#include<stdio.h>
#include<conio.h>
main()
{
int n,r,sum=0,temp;
clrscr();
printf("enter the number=");
scanf("%d",&n);
temp=n;
while(n>0) ...
完整答案
参考代码实现:
#include<stdio.h>
#include<conio.h>
void main(){
int i,fact=1,number;
clrscr();
printf("Enter a number: ");
scanf("%d",&number);
for(i=1;i<=number;i++){
f...
完整答案
参考代码实现:
#include<stdio.h>
#include<conio.h>
long factorial(int n) // function to calculate the factorial of a given number.
{
if (n == 0)
return 1;
else
return(n * factorial(n-1)); //cal...
完整答案
参考实现代码如下:
#include<stdio.h>
#include<conio.h>
main()
{
int n,r,sum=0,temp; //declaration of variables.
clrscr(); //It clears the screen.
printf("enter the number=");
scanf(...
完整答案
参考代码实现:
#include<stdio.h>
#include<conio.h>
main()
{
int n, reverse=0, rem; //declaration of variables.
clrscr(); // It clears the screen.
printf("Enter a number: ");
scanf...
完整答案