Tutorial Study Image

C 语言面试问题

指向指针的指针变量可以保存其他指针变量的地址。例如:`int x = 3, *p = &x, **q = &p;`。

`malloc` 和 `calloc` 都用于分配内存,这两个函数都从堆中动态分配内存。`calloc` 会将分配的内存初始化为零。

`auto` 关键字是一种默认存储类别,在函数内部声明。`auto` 的作用域仅限于声明它的函数内部。`auto` 存储类别在 C 语言编程中很少使用。

`break` 用于跳出当前代码块的控制流。`break` 用于循环或 `switch` 语句中。

 

for ( initialization, test expression, increment)
    {
             statements to be executed inside the loop

    }

 

悬空指针是指指向无效内存位置或不适当数据类型的指针。它也称为野指针。

类型转换意味着我们可以将一种数据类型的变量更改为另一种数据类型。我们可以通过一个例子来理解这个概念,如果我们有一个整数数据类型,并且我们必须在该整数变量中存储一个长整型,那么我们可以将 `int` 类型转换为 `long` 类型。

内存泄漏是一种资源泄漏,当程序错误地分配或管理内存,或者在程序结束后忘记释放内存时,就会发生内存泄漏。

控制或避免内存泄漏的简单方法是在 `malloc` 函数后写入 `free` 内存,或者在程序中使用 `calloc`。或者将 `memset` 与 `malloc` 一起使用。此外,使用指针进行内存分配时要小心。

两者主要用于循环中递增值。表达式 `i++` 返回值然后递增,而 `++i` 返回递增后的值。

数组是相同数据类型元素的集合,可以通过索引变量访问。而指针是一个变量,它保存另一个变量的地址。数组可以在内存位置序列中存储多个元素,而指针可以保存一个变量的地址。

存储类定义函数或变量的特性,它定义变量的作用域。在 C 语言中,我们主要有 `Auto`、`Extern`、`Static` 和 `Register` 存储类说明符。

基地址是指数组的起始位置,它包含数组中第一个元素的地址。

L 值是出现在赋值运算符“=”左侧的值。L 值指的是内存中标识对象的某个位置。有时内存位置可以被修改,这称为可修改的 L 值。R 值将出现在赋值运算符的右侧,它指的是存储在某个内存位置的数据值。

嵌套结构体是指如果一个结构体包含另一个结构体的成员或元素,则称为嵌套结构体。

假设我们不知道指针要指向的地址,我们通过将该指针的值赋为零或空来声明指针,这称为空指针。空指针也称为空引用,其中指针不引用有效对象。

L 值是赋值运算符“=”的左侧值。它拥有对象的内存位置,L 值有两种类型:

  • 可修改的 L 值
  • 不可修改的 L 值。

C 语言中的标识符是 C 程序内部给变量、数组、函数、结构体等起的名称。

编写标识符的规则

  1.  标识符在程序内部必须是唯一的。
  2.  标识符可以包含字母、数字字符和下划线。 
  3.  起始字符必须是字母或下划线。
  4.  标识符对大小写字母敏感。[ 区分大小写]
  5. 标识符中间不能包含任何空格。
  6.  关键字不是标识符,不要使用关键字作为标识符。

在 C 语言编程中,数据类型分为两种:基本数据类型和派生数据类型。

基本数据类型包括以下基本数据类型:

  1.  整型
  2.  字符型
  3.  浮点型
  4.  空类型(Void)。

派生数据类型是从基本数据类型派生出来的数据类型,意味着我们将基本数据类型组合起来。它包括:

  1. 数组
  2. 指针
  3. 结构体
  4. 联合体

字符串常量是 C 程序中用引号括起来的固定字符串值,例如“hello”是一个字符串常量。没有值的常量称为空字符串常量,表示为“ ”。字符串常量在内存位置中存储为字符数组,通过索引变量进行索引。

局部变量和全局变量的定义基于变量的作用域或可见性。如果在函数内部定义的变量,其作用域仅限于该函数内部,则称为局部变量。如果变量在函数外部定义,这意味着它可以从程序的任何地方访问,则称为全局变量。

静态变量在函数内部或外部定义,其值在编译器中保持不变,直到程序运行,并且可以被任何函数调用。静态变量的作用域适用于整个程序。

两者都用于将参数传递给函数。在按值调用方法中,通过将变量复制到函数来传递值。

在按引用调用方法中,我们传递变量的地址。

在动态内存分配中,内存是在程序运行时分配的,因此内存可以在程序运行时增加,内存主要从堆中分配。

动态内存分配的方法有:

  1. Malloc()
  2. Calloc()
  3. Realloc()
  4. Free。

动态内存是从堆内存中分配的。内存分配的主要方法有:

  1. Malloc()
  2. Realloc()
  3. Calloc()
  4. Free

在函数调用时传递给函数的值或变量称为实参。

如果在函数声明中使用参数,它们将在函数原型中声明,称为形参。

在程序实际处理之前,预处理器是处理源代码的程序。预处理器用于 C 程序中头文件的包含和 #define。

在程序中,一个函数重复调用自身称为递归。在实践递归时必须提及退出条件。

递归的类型有:

  • 线性递归
  • 二叉递归
  • 多重递归
  • 尾递归

一旦一个指针指向一个变量后,就不能再指向另一个变量的指针称为常量指针。换句话说,一个不能改变它所持有的地址的指针称为常量指针。

在 C 语言编程中,标记是编译器在程序中理解的最小元素。C 标记的例子有:

  • 关键字
  • 标识符
  • 常量
  • 字符串
  • 运算符等。

声明变量意味着我们为该变量添加类型,如 int、char、float 等,但在定义变量的情况下,我们首先声明一个变量,然后为其赋值,如“int x = 10”。

变量声明将类型与变量关联,但变量定义为变量提供类型和值。

包含一些指向相同结构体类型的指针的结构体称为自引用结构体。我们可以将其描述为指向相同结构体类型的结构体。

数组是 C 语言中的一种数据类型,它是相同数据类型元素的集合,可以通过公共索引进行索引。

未正确初始化的指针称为野指针,换句话说,指针指向随机内存位置,其中包含一些垃圾值。野指针会导致程序崩溃或以程序错误结束。

`scanf()` 是头文件库“stdio.h”中的一个内置函数。`scanf()` 用于从用户通过键盘或任何输入设备读取和接受输入,输入可以是字符串、数字或任何其他类型。

IDE 是集成开发环境,它是编译器之间的用户界面,用于编写和执行 C 程序。

前增量在将值赋给变量之前递增值。后增量在将值赋给变量之后递增值。

编译器是一个程序,作为机器和人之间的接口,它将人类可读的程序转换为机器理解的格式,即机器语言。这个转换过程称为编译。

段错误是最常见的运行时错误,由于访问无效内存位置而导致。

当程序以不正确的方式使用内存或使用无效内存时,就会发生内存故障。

单个等号“`=`”称为赋值运算符,用于将值赋给变量。

双等号“`==`”称为关系运算符,用于在 `if` 条件或其他情况下比较值。

C 中的数组

  1. 数组是相同数据类型元素的集合。
  2. 数组元素存储在内存位置的序列中。
  3. 数组名称包含起始元素的地址。

C 语言中的链表

  1. 链表是一种具有动态内存分配的线性数据结构。
  2. 在链表中,元素不存储在内存位置的序列中。
  3. 链表本质上是动态的。而数组的长度是固定的。

未初始化指针也称为野指针。它指向随机内存位置。这些指针可能导致程序行为异常。

数组大小不能在运行时声明,数组的大小必须在编译前提供,因为数组不像链表那样使用动态内存分配。

两者都是 C 语言编程中的字符串函数,其中 `strcpy` 是用于复制整个字符串的函数,而 `strncpy` 用于复制字符串的特定部分。

指针用于存储变量的内存地址。指针用于动态分配内存。在使用指针时,请注意不要发生内存泄漏。

`main` 是 C 语言编程中程序开始执行的函数。

`#define` 是一个预处理器指令,用于在 C 语言编程中定义常量。常量可以是整数、浮点数、字符或任何数据类型。

它是一个预处理器运算符,用于连接两个标记。它也称为标记粘贴运算符。

`pragma` 是一个预处理器指令,用于向编译器提供一些附加信息。它也被编译器用于实现一些特殊功能。

数组

  1. 它可以保存任何数据类型
  2. 数组大小是固定的,不能更改
  3. 它不能以空字符结尾

字符串

  1. 它可以以空字符(‘\0’)结尾
  2. 它只能保存字符数据类型
  3. 这里字符串大小不固定,可以更改 

指针是一个变量,它存储另一个变量的地址或内存位置。

文件指针用于处理和跟踪正在访问的文件。为了声明文件指针,我们使用一种名为“File”的新数据类型。

Void 指针是一种不与任何数据类型关联的指针,这意味着它可以用于指向任何其他数据类型。它也称为通用指针。

由于段错误或内存故障,当程序崩溃或终止,或者我们尝试写入只读内存或已释放的内存块时,会创建一个转储错误文件,这在 C 语言中称为核心转储。

顾名思义,常量指针是一种指针,一旦它通过存储变量的地址指向一个变量,那么该地址就不能更改。这意味着一旦常量指针用于指向一个变量,我们就不能使用该指针指向任何其他变量。

空指针是不指向任何东西的指针,这意味着它不指向任何内存位置。当我们尝试访问空指针时,我们肯定会得到一个错误,并且程序会崩溃,我们通常会得到段错误或内存故障。

`Memcpy` 是一个内存复制函数,用于将一些字符从一个内存位置复制到另一个内存位置。

语法

void *memcpy(void *destination, const void * source, size_t n).

 

自动变量

寄存器变量

1. 自动变量是局部变量。 1. 寄存器变量也是局部变量。
2. 存储在主 CPU 的内存位置。 2. 存储在寄存器内存中。
3. 可以访问但速度有点慢。 3. 由于存储在寄存器中,因此可以更快地访问。

结构体是一种派生数据类型,与数组不同,结构体可以在一个内存块中包含一组具有不同数据类型的元素。

我们使用关键字 `struct` 来表示结构体。结构体中的所有元素都称为其成员。

  1. 在数组中,数据可以轻松排序。
  2. 在数组中,遍历数据很容易。
  3. 数组提供对元素的随机访问。
  4. 数组易于声明和实现,因此代码经过优化。

联合体是一种派生数据类型,允许程序员在内存位置存储不同的数据类型。

联合体类似于结构体,但联合体的大小不像结构体那样是所有成员的总大小。联合体只取其最大元素的大小。

运算符用于对常量值或变量执行操作,通常用符号表示。例如,

  1. 算术
  2. 关系
  3. 位运算符
  4. 逻辑,移位运算符
  5. 赋值
  6. 三元运算符等。

指针是一个变量,它保存另一个变量的地址,我们可以对指针执行一些算术运算。

  • 递增
  • 递减
  • 加法
  • 减法
  • 比较

一个或多个语句共同执行一个可以调用的任务,这称为函数。每个 C 程序都从 `main()` 函数开始执行。

函数有一个名称、返回类型和要传递给函数的参数,函数体包含可执行语句集合。

函数优点。

  • 代码可以重用。
  • 代码优化
  1. 库函数

    内置在头文件中,当我们包含这些头文件库时,可以在任何程序中使用的函数称为库函数,例如 `Printf`、`Scanf`、`puts` 等。

  2. 用户自定义函数

    由用户编写以实现任务或计算的函数,这些函数有助于降低程序复杂性并提高可重用性,这称为用户自定义函数。

  3. 递归函数

    一个函数在找到退出条件之前不断调用自身,这称为递归函数。

动态内存分配是在程序运行期间分配内存的方法,内存从堆中分配。

动态内存分配的方法有:

  1. Malloc
  2. Calloc
  3. Realloc
  4. Free。

在 C 语言中,我们有一组字符,并将所有字符集都包含在 ASCII 字符集或扩展 ASCII 字符集中。除此之外,有些不属于这两个字符集的字符被称为转义序列。

如果我们在字符串中使用它,它不会表示自身。转义序列有 2 或 3 个字母,以反斜杠 '\' 开头。

在 Switch Case 中,用户可以选择多个 case。如果我们在 case 后没有使用 Break,那么该 switch 中的所有 case 都将被执行,直到找到 Break 为止。

在 C 编程中,我们必须在程序内部做出一些决策,这意味着“是”或“否”的条件,如果为“是”,则执行一组语句,否则执行另一组语句。

C 语言中有三种类型的决策控制语句。

  1. If
  2. If else
  3. 嵌套 if

在 C 语言中,我们必须在循环中执行一组语句,直到满足某个条件,循环控制就是为此而生。

不同类型的控制语句有

  1. For 循环
  2. While
  3. Do While

汇编器

它是一个将汇编语言(一种低级语言)转换为机器语言的程序。

编译器

它是一个用于将高级人类可读代码转换为机器语言或目标代码的程序。

解释器

它也是一个类似于编译器的程序,但翻译是逐行进行的,这意味着解释器逐行转换,而编译器则一步读取并转换整个源代码。

枚举在 C 编程中也称为关键字 'Enum',它是一种派生或用户定义的数据类型。Enum 用于为常量分配名称,使程序易于理解。

在 C 编程中,数据在文件中按顺序一个接一个地排列,这意味着文件中的数据按适当的顺序一个接一个地排列。

在这种情况下,要访问文件中的数据,我们必须以连续的顺序读取文件中的数据,直到找到数据为止。在这里,数据只能一次读取一个。

语法是 C 编程中编写语句或代码的规则或格式,当我们违反编写语句的规则或格式时,就会发生语法错误。这是一种常见的错误,由编译器检测到。

调试意味着查找并解决我们在编写 C 程序时发生的错误。程序中会有编译时错误和运行时错误。在调试中,我们必须查找并解决所有错误才能得到输出。

使用调试选项 -g 编译程序,运行 gdb,通过程序内部的断点进行调试,在 gdb 调试器中执行程序。打印所有变量的值进行检查。使用 gdb 命令。

这些类型的错误发生在程序运行期间,通常运行时错误与内存分配相关,例如内存故障、分段故障、访问空指针、内存泄漏等,以及程序逻辑中发生的错误。

多维数组也称为数组的数组,多维数组的一个常见示例是矩阵,其中元素以表格格式存储。二维数组的大小是使用所有维度的大小计算的。

动态数据结构在 C 编程中非常重要,它允许用户高效地使用内存。动态数据结构从堆中动态分配内存,可以在运行时增加或减少。

二叉堆是一种完整的二叉树,并且具有某种顺序,使得父节点要么大于子节点,要么子节点大于父节点,并且对于二叉树中的所有节点都相同。

顾名思义,流是流入或流出 C 程序的连续字节流,所有输入和输出设备,如键盘、显示器,都属于流。

在 C 程序中,所有执行都从 Main 函数开始。

  • 面向结构的程序被划分为函数,而面向对象的程序被划分为称为对象的模块。
  • 面向结构的编程是面向任务的,而面向对象的编程是面向数据的。
  • 面向结构中,数据在函数之间传递,而在面向对象中,数据是隐藏的,不参与传递。

是的,编译 C 程序不需要 Main 函数,但 C 程序的执行只有在有 Main 函数的情况下才会开始。

两者都是 stdlib.h 头库中的内置函数,都用于检索绝对值。Abs 返回整数的绝对值,而 fabs() 返回浮点数据类型的绝对值。

头文件也称为库文件。头文件包含在 C 程序中以使用程序中的内置函数,头文件包含程序中使用的函数的原型和解释。

在程序中,我们可以将程序划分为独立的子程序(称为模块),这些模块可以重复使用以实现某些功能,这称为模块化编程。它用于代码优化。

不能,数组不使用动态内存,必须在 C 程序编译之前声明。

优点

  1. 它可用于复杂的迭代。
  2. 这里函数调用自身,因此可以避免多次调用函数

缺点

  1. 必须需要退出条件,否则会导致程序崩溃
  2. 在这种情况下,调试将很困难,因为函数正在调用自身。

流是字节的输入序列,文本流由 ASCII 值组成,这些值范围从 0 到 255,表示所有字符。而二进制流中是原始的 0 和 1,无法被 C 编译器解释。

文本流主要用于处理文本文件,而二进制流可以处理所有类型的文件。

不一样,声明变量意味着我们为变量分配了一个数据类型,而定义变量意味着我们为变量分配了一个内存位置和一个值。

程序中函数的原型意味着在程序内部声明一个函数。声明包括

  • 函数名
  • 类型
  • 返回值。
  • 参数。

两者都是将参数传递到 C 程序中的函数的方法。

在按值调用方法中,我们复制变量的值并将其作为参数传递到函数中。

在按引用调用方法中,我们发送变量的地址,而不是将变量的值发送到函数中。

堆栈是一种数据结构,其中数据以 LIFO(后进先出)方式存储和检索。它就像一堆硬币。

将值插入堆栈的过程称为 Push,从堆栈中检索值的过程称为 Pop。

在 C 程序中,为变量赋值或初始化变量值的过程称为初始化。这在 C 编程中非常重要,否则变量可能包含一些垃圾值,从而导致程序错误。

复合语句称为块,它是两个或多个语句的组合,这些语句将出现在另一个语句体中,并将一起执行。块或复合语句用大括号表示。

预处理器指令是我们借助符号 '#' 在 C 程序开头包含的语句。预处理器指令用于在程序中定义常量。

FIFO 意思是“先进先出”,就像现实中队列的逻辑一样。它是一种用于将元素插入和删除到称为队列的数据结构中的方法。其中,第一个添加到队列中的元素将是第一个从队列中取出的元素。

当调用函数时,要传递给函数的值称为实际参数。

野指针是 C 代码中未初始化的指针。这些指针可能导致程序出错或程序崩溃。

C 语言中的循环有

  1. For 循环
  2. While 循环
  3. Do while 循环
  4. 嵌套循环。

其中 Do While 是出口控制循环,其他都是入口控制循环。

  1. 如果我们没有有效的内存地址可指向,空指针用于初始化指针变量。
  2. 如果我们不必将有效地址传递给函数,则使用空指针。
  3. 空指针用于终止 For 循环。

间接运算符是一个一元运算符,用 '*' 表示。间接运算符用于从指针变量指向的内存位置获取值。它解引用一个指针。

不能,指针是存储包含值的变量地址的变量,因此我们无法直接在 C 语言中添加指针。

堆栈溢出是一种情况,当程序尝试将比堆栈中分配的内存更多的元素添加到堆栈内存中时发生。通常,无限递归是导致堆栈溢出的最常见问题。

答案是不能,因为 C 编程中的命名规则,我们不能以数字开头变量。

在 C 编程中,常量是程序执行期间其值不能更改的元素,它是一个硬编码值。

变量是 C 语言中的一个元素,其值可以随时分配,我们也必须将变量声明为任何类型。

  • 整型常量
  • 字符常量
  • 浮点常量
  • 字符串常量。

环境变量是 C 语言中任何程序都可以访问的变量。当我们声明一个环境变量时,我们可以在 C 程序的任何地方使用它。

不能,数组标签用于存储数组,因此不能更改。

我们都知道 '++' 运算符用作增量运算符。因此,如果此运算符在变量之前使用(即 '++var'),则变量在使用之前在表达式中递增一。但是,如果运算符在变量之后使用(即 'var++'),则首先评估表达式,然后递增一。

无限循环是一种错误条件,其中循环无限次执行,这发生在循环的退出条件未正确指定时。

指针是存储另一个变量地址的变量,指针上的操作有

  • 比较。
  • 加/减(不包括 void 指针)。

字符串长度是字符串中字符的数量,不包括字符串的结束字符 '\0'。

如果我们想删除宏的所有定义,我们使用 #UNDEF,它告诉预处理器删除所有定义。

答案是不能,在 C 语言中我们不能比较两个结构或结构变量,我们可以比较两个结构的元素。但在极少数情况下,答案是肯定的,如果两个结构都使用 Calloc 内存分配初始化或使用 Memset 设置,我们可以比较两个结构变量。

C 语言中允许的最大标识符长度是 32 个字符,其中 31 个字符和一个结束字符。

这个语句是正确的,'goto' 是一个用于从 'goto' 无条件跳转到带标签语句的语句。

算法使 C 程序变得简单。算法是解决 C 程序的逐步过程。它提供了 C 程序逻辑和实现的详细蓝图。

随机数可以使用 C 语言中不同的逻辑生成,但简单的方法是使用生成随机数的 rand() 函数。

控制结构是面向过程编程语言的骨干。它构成了程序的基本实体,它们是:

  1. 顺序结构:即直线路径。
  2. 选择结构:用于分支,如“是”或“否”条件。
  3. 循环结构:用于在 C 语言中循环执行一些语句。

字符串的长度可以使用 'strlen()' 计算。Strlen 是一个函数,它将字符串作为输入并返回字符串长度。

为了在 C 程序中连接两个字符串,使用 strcat() 函数,这意味着字符串连接。它将第二个字符串复制到第一个字符串的末尾。

结构是一种派生数据类型,用于存储不同数据类型的元素。结构用于在 C 语言中存储记录。

二进制文件是数据以二进制格式存储的文件,这种格式不是人类可读的,但机器可读。而在文本文件中,数据以人类可读的格式存储,使用 ASCII 字符集值编写。

它被称为字符串的结束空字符,每个字符串都以 '\0' 字符结尾。

是的,我们可以在声明变量时使用数据类型为变量初始化值。

随机访问文件是我们可以访问任何随机文件数据而无需按顺序读取的文件。它的用途是当程序需要读取大文件以搜索某些数据时,随机访问文件将非常有用。

不能,toupper 是一个将小写字母转换为大写字母的函数。toupper 一次只能将一个字母从小写转换为大写。

位运算符用于制作位掩码,其中制作位串的过程,并使用该位串我们可以从字节中只选择某些位,这称为位掩码。

这是一个错误的陈述,因为我们无法移动机器字。

使用 C 语言中的预处理器,我们可以使程序

  • 易于阅读
  • 易于修改
  • 易于移植或移动到任何架构
  • 易于开发。

它是对字符串的操作,它将两个字符串组合在一起,表示为“strcat”函数。使用字符串连接函数,第二个字符串被复制并粘贴到第一个字符串的末尾。

静态文件只有在头文件中定义后才能使用,所以这是一个错误的陈述。

Memcpy 用于将一定数量的内存字节从一个位置复制到另一个位置,这意味着 Memcpy 可以与任何数据类型一起使用。

Strcpy 是一个用于复制字符串并将其粘贴到另一个字符串的函数。它只适用于字符串或字符数据类型。

STRCMP 函数用于比较两个字符串。它逐个字符地比较,直到在两个字符串中找到空字符。Strcmp 区分大小写,如果我们要不区分大小写地比较,请使用函数 'STRCMPI'。

Strcmpi 几乎与 strcmp 函数相同,它逐个字符地比较两个字符串,直到找到空字符。Strcmp 区分大小写,而 strcmpi 不区分大小写。
  1. 用作错误值。
  2. 用作哨兵值。
  3. 用于停止递归数据结构中的间接引用。

远指针是一个 32 位指针,可以访问当前段外部的内存位置。计算机分配一个段寄存器来存储远指针。

近指针是给定 16 位内存中的 16 位地址。它可以访问小尺寸的数据。

巨指针几乎与远指针相同,因为它是一个 32 位指针,可以访问段外部的内存。

但远指针是固定的,这意味着一旦它位于某个位置就不能更改,但巨指针可以更改。

Nul 是一个 ASCII 字符,它是第一个字符,用 '\0' 表示。而 Null 用于表示空指针或值为 0 的内置常量。

Locale.h 是一个头文件,它定义了一些与位置相关的内容,如日期、时间格式、货币等。

Goto、Break、Continue、Return 是 C 语言中跳出函数的语句。

信号是软件生成的中断,当用户按下某些键(如 ctrl + c 等)时,操作系统会将它们发送给进程。

将 Double 转换为 Float 可能被称为窄化转换,这意味着它可能会丢失一些关于数据类型的信息。因此,这取决于编译器

'sprintf' 与 'printf' 相同,但 'sprintf' 发送格式化字符串,而不是像 'printf' 那样将输出发送到控制台。

这个语句是错误的,'#include' 语句用于将头文件库添加到程序中,所以它必须写在程序的开头。

锯齿数组:也称为不规则数组,这意味着它是一个数组的数组,其中成员数组具有不同的大小。

Argv[0] 是一个命令行参数,它代表程序名,如果找不到程序名则返回 Null。

自动变量也称为局部变量,它们在块内部声明和使用。对于这种类型的变量,当控制进入块时自动分配内存,当控制退出块时也自动释放内存。

C 编程中逻辑运算的结果将是一个二进制值,即 1 或 0

关系运算符用于检查操作数之间的关系,不能用于具有不同数据类型的结构。

行控制是一种预处理器指令,用于让编译器了解源代码的位置,以及每个标记的来源。

当数组大小可选时,我们可以使用关键字 Extern 来声明数组。

字符串操作可以返回 Void、Int 或 Char 数据类型。

  1. 为了减少内存使用。
  2. 要存储的值超出最大限制。
  3. 要存储的值的格式不受该数据类型支持。

第一个参数是文件名,第二个参数是访问模式。

此语句是错误的。常量变量在使用前需要定义。

Short 是 'Short Int' 的缩写,用于声明 Int 数据类型,但其存储使用两个字节的内存。而 Int 也用于声明整数数据类型,但 Int 的存储空间为 4 个字节。

在 C 编程中声明位域时,我们使用 Char 数据类型。

它将格式化数据写入字符串。

它是头文件 'stdio.h' 中定义的一个类型名称。

条件包含用于防止程序中多次添加头文件。

  1. 它防止变量的多次声明。
  2. 它防止相同函数的多次声明。
  3. 检查变量是否存在,如果存在则执行某些操作。

最简单的方法是使用内置函数 'random()'。

'srand' 用于设置生成随机数的起始点。它为随机数生成器播种。

是的,字符串连接函数在连接两个字符串后会添加空字符。

Enum 是枚举数据类型,它使程序易于理解。它由编译器处理。

int ungetc(int c, FILE *fp)

Return 用于将控制从函数返回到主程序,Return 关键字可以定义从函数到主程序的返回值。如果函数不返回任何内容,我们可以使用 Void。

Switch 是一种选择控制机制,用于允许变量的值改变程序执行的控制流。

换句话说,如果我们有一组情况,并且需要选择与用户输入匹配的一个,我们可以使用 switch case。
 

  • 除了普通变量外,静态变量在程序运行时仍然存在于内存中。
  • 静态变量的内存分配在数据段中。
  • 即使我们忘记初始化,它也会自动初始化为零。

联合体的大小根据联合体中最大成员的大小来决定。

C 是一种中级语言,它是高级语言和机器语言之间的桥梁。

它就是集成开发环境。它是一种提供用户界面和编译器来创建、编译和执行 C 程序的机制。

换行符用 '\n' 表示,用于让编译器理解它是一行的结束并开始新的一行。

标记是 C 语言的组成部分。C 程序中的每一个小单元都称为标记。这些标记组合在一起编写 C 程序。

C 标记主要分为 6 种类型。

  • 关键字
  • 标识符
  • 常量
  • 字符串
  • 特殊符号
  • 运算符

关键字是保留字,在 C 编程中具有预定义的功能。关键字对编译器具有特殊含义,指示要执行的操作。

关键字是程序语法的一部分。例如 While、Break、Signed 等都是关键字的一些示例。

  • 局部变量
  • 全局变量
  • 环境变量

局部变量是 C 程序中使用的变量,其作用域仅限于声明它的函数内部。

这意味着在函数内部声明的局部变量不能从函数外部访问。

运算符是用于在 C 语言中执行某些任务的符号,例如加法、逻辑比较等。例如 '+'、'-' 等

用于将值赋给变量的运算符或符号称为赋值运算符,例如 =、+=、-=、/+=、%= 等都是赋值运算符。

它是一个不能改变它所指向的变量地址的指针。一旦这个指针被用来指向一个变量,我们就不能再使用这个常量指针来指向任何其他变量。
 

是的,C 语言中所有的语句、结构、函数、关键字以及所有其他内容都区分大小写。

修饰符是 C 语言中的关键字,用于改变数据类型,修饰符定义了为变量分配多少内存。例如,Short、Long、Signed 等。

short、long、signed、unsigned、long long

它是 C 语言中最常见的一元运算符,用于计算变量或任何操作数的大小。如果与数据类型一起使用,它将返回分配的内存量。

C 语言的继承者是 B。实际上,C 语言是由 Dennis Ritchie 在贝尔实验室开发的,用于 Unix 操作系统。

C 语言


  1. 它是一种中级语言
  2. C 语言中没有异常处理机制
  3. C 语言是结构化语言。

    JAVA


  1. Java 是一种高级的、人类可读的语言。
  2. Java 中存在异常处理。
  3. 面向对象编程语言

C 语言

  1. 结构化编程语言。
  2. 采用自顶向下的方法。
  3. 不支持用户定义的数据类型。

C++ 语言

  1. 面向对象编程语言。
  2. 设计采用自底向上的方法。
  3. 支持用户定义的数据类型。
  1. 灵活性
  2. 可移植性
  3. 交互性
  4. 模块化
  5. 效率

在 C 语言中,算术运算符用于在 C 程序中执行算术或数学运算,如加法、减法、乘法、除法和取模。

C 编程中的 atexit() 函数用于在程序退出或将控制从函数返回到主程序时执行 C 函数。

"Memcpy" 和 "Memmove" 函数都用于将一系列数据从一个内存位置复制到另一个位置。但在 "Memcpy" 函数中,我们应该小心源内存和目标内存位置不要重叠。而在 "Memmove" 中,这不是问题。

答案是否定的,我们可以向函数传递任意数量的参数,这取决于堆栈上可用的内存。

数组下标是一个整数常量,用于获取数组位置中的元素,它绝不能是负值。其大小为 1。

空指针是一种指针,它可以用于指向任何数据类型的变量。但零指针是一种不指向任何东西的指针。

两者都用于分配内存。在栈中,内存是静态分配的,而堆内存用于动态内存分配。

交错数组又称为数组的数组。交错数组是一个数组,其元素也是数组。每个元素数组可以有不同的大小和维度。

  1. %d - 整数格式说明符
  2. %c - 字符格式说明符
  3. %s - 字符串格式说明符
  4. %f - 浮点格式说明符
  5. %u - 无符号整数格式说明符。

它只是一种数据存储格式,变量可以在其中存储数据以执行确定的操作。它们在 C 程序中用于在使用变量之前指定变量。

 

变量分为 3 种类型。它们是

  1. 局部变量
  2. 全局变量
  3. 环境变量
  1. auto
  2. double
  3. int
  4. break
  5. switch
  6. long。等


 

这些运算符用于查找两个变量之间的关系。换句话说,这些运算符比较 C 程序中两个变量的值。

用于执行逻辑运算的运算符称为逻辑运算符。C 程序中使用的逻辑运算符是

  1. 逻辑与 (&&)
  2. 逻辑或 (||)
  3. 逻辑非 (!)

编程语言是一种具有一组指令和语法的语言,用于执行任务。

嵌入式 C 是 C 编程的应用级别,用于在微控制器设备中进行编程。

Printf 是一个内置函数,在头文件 'stdio.h' 中声明和定义。Printf 函数用于将输出打印到输出设备。

Void 是一种空数据类型,在函数声明中使用,如果函数不向主程序或函数返回任何内容。

Break 用于中断并从 Switch case 语句的循环中获取控制权。否则,Switch 中的所有 case 都将执行,最终导致程序错误。

  1. 按引用调用
  2. 访问数组元素
  3. 动态内存分配
  4. 树、图、链表等数据结构。

它是在程序中使用变量之前,将初始值赋给变量的过程。如果没有这个过程,变量将具有垃圾值,从而导致错误输出。

 

此函数用于查找字符串的长度。

结构体是一种派生数据类型,用于存储记录,这意味着结构体中的元素可以是不同的数据类型。

gets() 函数,它是一个内置函数,用于从用户接受输入,在头文件 'stdio.h' 中定义。
 

栈数据结构就像一堆硬币,它用于添加和删除元素的方法是 LIFO,即“后进先出”,就像一堆东西一样。

 

静态内存分配

动态内存分配

用于数组

用于链表

编译时分配内存

运行时分配内存

执行期间,内存不能更改 执行期间,内存可以更改

 

可以通过命令提示符向 C 程序传递参数,这称为命令行参数。命令行参数由 argc 和 argv[] 表示。其中 argc 是计数,argv 是参数。

命令行参数用于在程序外部控制 C 程序,而无需在程序内部硬编码值。

printf() 函数用于将“字符、字符串、浮点数、整数、八进制和十六进制值”打印到输出屏幕或任何其他输出设备。

Scanf(),此函数用于从键盘或用户的其他输入设备读取字符、字符串、数字数据。这两个函数都是内置库函数。

Stderr 是 C 程序用于向控制台发送输出错误消息的输出流,它将诊断数据发送到控制台。

面条式编程也称为“纠缠的编程网”。C 程序中由于程序员经验不足而导致的一种代码类型。程序控制在此处和彼处跳转,并相互重叠,最终变得复杂,大量使用 goto 语句使程序复杂化。

总线错误是硬件引发的致命错误,用于通知操作系统某个进程正在尝试访问 CPU 无法物理寻址的内存。错误可能由以下原因引起。

  1. 无效地址
  2. 其他设备的硬件错误。
  3. 访问不对应任何设备的物理地址。


 

Strcat 函数,也称为字符串连接函数,它将第二个字符串添加到第一个字符串的末尾,并在最后添加空字符。

getch() 是一个内置输入函数,从用户读取单个字符,但输入的字符不显示,因为它不使用缓冲区。

getche() 也用于从用户读取输入,但与 getch() 不同,getche 显示它读取的输入。
 

因为它充当高级语言和低级语言之间的中介,这意味着它支持高级语言和低级语言的两种功能。

单词 Volatile 的意思是“随时可以更改”,在这里也是同样的意思。声明为 Volatile 的变量告诉编译器它的值可以随时被外部源更改。

位运算用于在位级别进行操作。用于在位级别操作数据。在 C 语言中,位运算符有

  1. & (按位与)
  2. | (按位或)
  3. ~ (按位非)
  4. ^ (异或)
  5. << (左移)
  6. >> (右移)

运算符“*”用作变量的指针。例如 '*b',其中 '*' 是变量 'b' 的指针。

运算符“&”用于获取变量的地址。例如,'&b' 将给出变量 'b' 的地址。

通常,Switch-case 语句用于根据用户的输入从一定数量的 case 语句中执行一个 case。但在某些情况下,没有与用户输入匹配的 case,在这种情况下,控制权跳转到 Default case 并执行它。
 

在函数内部声明为 Static 的变量,其作用域不会像自动变量那样在该函数内部结束。局部静态变量与自动变量具有相同的作用域。

此语句是正确的。一个变量可以既是常量又是易失性变量。

Dennis Ritchie 在贝尔实验室发现了 C 语言。

函数主要分为两种类型。它们是

1. 库函数 - 这些函数在头文件中声明,例如 scanf()、printf()、gets()、puts()、ceil()、floor() 等。

2. 用户定义函数 - 这些函数由 C 程序员自己创建,以减少程序的复杂性。

 

  1. 程序开发变得容易。
  2. 可以完成模块化和结构化程序。
  3. 可以轻松构建或测试单个函数。
  4. 一个函数可以调用其他函数,也可以调用自身。
  1. 使用指针,我们可以访问内存位置。
  2. 它减少了代码的复杂性并提高了性能。
  3. 使用指针,我们可以从函数返回多个值。



 

数组的基地址是指数组的起始地址。第一个元素存储在数组中的位置。
 

栈内存,即静态分配的内存。

调用函数时,我们需要向被调用函数传递参数,为此我们有两种方法。

  1. 按值传递
  2. 按引用调用

使用 'GOTO' 语句我们可以执行无条件分支,但使用 goto 时要小心,因为它可能导致面条式代码。

' Sizeof ' 关键字用于计算变量或数据类型的大小。

  1. 比较
  2. 加法/减法(不包括 void 指针)

字符串的长度是该字符串中除了空字符 '\0' 之外的字符数,空字符 '\0' 表示字符串的结束。

保留字是 C 语言标准库的一部分的词,它们也称为关键字。保留字具有特殊的含义和用途,不能用于任何其他目的。例如 Int、Void、Return 等。

在 C 语言中,我们有 32 个关键字。

 

汇编器是一种将汇编语言程序转换为机器语言程序以供执行的程序。它将基本操作和所有内容转换为机器语言。

它将源代码转换为中间代码,然后该代码逐一执行。解释器逐步运行代码,这意味着只有在一步执行之后才会进入下一步。

在面向对象编程中,程序被划分为对象,主要关注的是被操作的数据而不是函数。对象是具有独特属性的数据。

  1. 数据类型用于定义变量。
  2. 它决定变量、常量和数组的大小
  3. 它是一种数据存储格式,变量可以在其中存储数据。

没有。没有这样的限制。可以向函数传递任意数量的参数。

Exit() 正常停止程序并将状态码恢复到父程序。

这个说法是真的,我们可以在程序中多次调用 'atexit' 函数。但执行将按相反顺序进行。

我们可以使用“#ifdef”预处理器来检查宏是否已定义。

在 C 语言中,程序执行从 main 函数开始。main 函数包含两个主要的子部分,称为声明部分和可执行部分

链接部分非常重要,它向编译器提供指令,用于链接标准系统库中的函数。

  1. 指针
  2. 数组
  3. 结构体
  4. 联合体

Free 是一个函数,用于释放使用 Malloc、Realloc、Calloc 等函数动态分配的内存,并将此释放的内存添加到系统。
   

 

在 C 程序中,包含程序元素。C 程序中的每个程序元素都称为标识符。函数、数组是标识符的示例

数组是一种数据类型,用于在序列内存位置存储相同数据类型的变量集合。数组大小不能在程序中修改,数组类型有

  1. 一维数组
  2. 二维数组
  3. 三维数组 


 

字符串是构成数组的字符序列,以空字符(‘\0’)结尾。它们总是用双引号括起来。

它是一种说明符类型,使编译器能够理解

  1. 在哪里存储变量
  2. 变量如何存储
  3. 变量的初始值
  4. 变量的生命周期或作用域。

不同类型的存储类说明符有

  • 自动
  • 外部
  • 静态
  • 寄存器

C 语言中旨在执行数学运算的函数称为算术函数。例如

  • log()
  • sin()
  • cos()
  • tan()
  • pow()
  • trunc()

分支控制语句只是用于从一系列块中执行唯一语句块的语句。不同类型的分支控制语句有

  1. Switch
  2. Break
  3. Continue
  4. Goto

三元运算符也称为条件运算符。如果条件为真,此运算符恢复一个值;如果条件为假,则恢复另一个值。