- 教师专业化与创新:新时代教育发展的关键要素与挑战(1-20)
- 小学语文老师面试答题技巧 教师专业化是新时代对教师的要求。教师创新是教师个体专业精神的体现之一,
面试深入解析C语言
目录
作者序言2
第一章:概念定义2
1.1.局部变量可以和全局变量同名吗? 2
1.2.堆栈溢出的常见原因有哪些? 3
1.3,? 5
第 2 章:关键词 5
2.1.如何引用已经定义的全局变量? 5
2.2.微控制器程序中经常使用无限循环。如何用C语言编写无限循环? 7
2.3. do…while 和 while…do 有什么区别? 8
2.4. C语言中static有什么用? 8
第三章 操作员 10
3.1.请写出以下代码的输出内容10
3.2.编写一个 if 语句,将 float x 与“零值”进行比较。12
2.? 15
附录1.C语言运算符表16
作者序言
现在写一本C语言的书似乎有些过时了。原因很简单。 C语言的书籍确实很多,其中也不乏经典优秀的作品。比如国外的《C程序设计语言》“::”符号(在Linux下必须使用g++编译,使用gcc时不识别域运算符::)。
深入分析:
C语言中有“作用域”的概念。例如,全局变量的作用域是整个文件(准确的说是定义该全局变量的文件中该变量的定义/声明之后的部分。但是,一般全局变量都定义在文件的头部)文件,所以说全局变量是文件范围的),局部变量是代码块范围的。
所谓代码块作用域,代码块是指由一对大括号{}围起来的部分(如函数的函数体、for循环的循环体等)。换句话说,局部变量的作用域实际上是定义该局部变量的代码块中变量定义体之后的部分。
从这一点来看,至少可以得出以下两个结论:
变量有不同的作用域
变量作用域重叠。例如,在一个函数内,该函数的局部变量和整个文件的全局变量都覆盖了这个范围。这就是范围的重叠。
在重叠作用域中,全局变量名和局部变量名不同也不会造成麻烦。因为我们可以通过变量名轻松区分两个变量(我们班有一个叫旺财的人,另一个班有一个叫福贵的人,我叫旺财,你一定知道我在找谁!)。但是当两个变量名重名的时候怎么办(我们班有一个旺财,隔壁班也有一个旺财,如果我在走廊里喊旺财,你以为我在喊谁呢?) ..)?
这种情况在逻辑上称为歧义。也就是说,有两种可能的解释,但没有办法区分它们。该怎么办?这是人为的。 C语言规定,当变量作用域重叠时,作用域小的变量覆盖作用域大的变量。例如函数中有一个局部变量var,文件中有一个全局变量var。然后在函数内部(准确的说是函数内部var局部变量定义之后的部分),使用var访问var局部变量,这里屏蔽了全局变量var(如果要访问全局变量var这里,对于C++可以使用::符号,但C语言中没有域运算符::)。
1.2.堆栈溢出的常见原因有哪些?
回答:
堆栈溢出一般是由堆栈越界访问引起的。例如,函数内的局部变量数组被越界访问,或者函数内的局部变量使用过多。超过操作系统为进程分配的堆栈大小也会导致堆栈溢出。
深入分析:
首先我们要明确区分堆、栈、栈这三个术语。堆和栈是两种不同的内存管理机制。
堆称为动态内存,由堆管理器管理(系统中的大佬,山高皇帝不用操心)。可以在程序中使用malloc函数来申请分配堆内存(从堆管理器)。使用完毕后,使用 free 函数释放(由堆管理器回收)。堆内存的特点是在程序运行过程中分配,在程序运行过程中释放(因此称为动态内存分配技术)。
栈是C语言使用的一种自动内存分配技术(注意是自动的,不是动态的,这是两个概念)。自动是指栈内存操作不需要C程序员的干预,而是自动分配、自动回收。在C语言中,局部变量是在栈上分配的。局部变量所需的内存是在进入函数时自动分配的。局部变量对应的内存在函数结束退出时自动释放。整个过程不需要程序员的干预。
堆栈这个词纯粹是用来忽悠人的。堆是堆,栈是栈。没有其他称为堆栈的内存管理机制。大多数时候,当有人谈论堆栈时,他们实际上想说的是堆栈。过去,这个领域的命名并不是特别准确。 (当有人谈论堆栈时,只需知道他们实际上指的是堆栈,然后自己停止使用这个不准确的词)。
由于堆和栈都是用于管理内存的机制,因此使用它们时有一定的规则。忽视规则的不正确使用(C语言的设计初衷是给程序员很大的自由度,所以有些错误不会被语言本身检查出来,完全由程序员来控制。)会导致一些内存错误,比如内存泄漏、溢出错误等。
内存泄漏主要发生在堆内存使用上。比如我们使用malloc申请内存,然后使用完之后就丢弃该内存的指针而不释放(这个指针是这块内存的唯一记录,程序中这块内存的释放就靠这个指针) ,那么这块堆内存就泄漏了(堆管理器认为该程序还在使用它,所以不会再将这块内存分配给其他程序)。必须等到程序完全退出并且系统回收了程序使用的所有资源(已申请的内存、已使用的文件描述符等)之后,泄漏的内存才重新回到堆管理器的怀抱。
内存溢出在堆和栈中都可能发生。参见章节示例 1_2_stack_ov
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-152652.html转载请注明,以上C语言面试深度解析:从概念定义到关键字与操作符的全面指南资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)