有没有发现?大厂笔试中最容易丢分的,不是复杂算法,而是看似基础的 “程序设计基本概念” 题!比如 “int i = i; 输出什么?”“C++ 调用 C 函数为什么要加 extern"C"?” 这类题,看似简单,却藏着很多易错点,不少技术大佬都栽过跟头。今天就拆解程序设计基本概念的高频面试题、易错点和避坑技巧,帮你吃透基础分,笔试不丢冤枉分~
一、高频考点 1:变量作用域与初始化 —— 这些坑别踩!
变量相关的题目是笔试必考题,尤其容易在 “作用域” 和 “初始化” 上设陷阱,看这道经典题:面试真题
int i = 1;
void main() {
int i = i;
// 问main里的i值是多少?
A. 未定义值 B. 1 C. 编译器报错 D. 0
}
易错答案:B(很多人以为会继承全局变量 i 的值)
正确答案:A
解析:
变量的作用域从 “声明时” 开始生效,main 函数里的 i 是局部变量,声明时直接用自身初始化,属于 “未定义行为”,值是随机的。全局变量 i 和局部变量 i 互不干扰,局部变量会覆盖全局变量的作用域。避坑技巧:
局部变量别用自身初始化,也别依赖全局变量的默认值,声明时明确赋值(比如 int i = 0;)。
全局变量和局部变量同名时,局部变量优先生效,若要使用全局变量,可加::前缀(比如::i)。
二、高频考点 2:函数重载与 extern"C"——C 和 C++ 混编必懂
面试真题
“在 C++ 程序中调用 C 编译器编译后的函数,为什么要加 extern"C"?”核心答案:
C++ 支持函数重载,编译后会给函数名加参数后缀(比如 void foo (int x) 会变成_foo_int);
C 语言不支持重载,函数名编译后保持原样(比如 void foo (int x) 还是_foo);
加 extern"C" 是告诉 C++ 编译器,按 C 语言的规则编译该函数,避免函数名匹配失败。
延伸考点:
C 和 C++ 的函数编译差异,是面试高频追问点,记住这 2 点:C++ 编译函数名:会包含参数类型、个数信息(支持重载);
C 编译函数名:仅保留函数原名(不支持重载)。
避坑技巧:
如果项目中既有 C 文件(.c)又有 C++ 文件(.cpp),调用 C 函数时一定要加 extern"C",否则会出现 “未定义函数” 的编译错误。
三、高频考点 3:代码优化技巧 —— 笔试加分项
面试真题
写法 1:
if(a == 'A') {
a++;
}
写法 2:
if('A' == a) {
a++;
}
正确答案:写法 2 更优
解析:
如果不小心把 “==” 误写成 “=”,写法 1 会变成 a = 'A'(赋值操作,编译器不报错,逻辑出错);写法 2 会变成 'A' = a(给常量赋值,编译器直接报错,能快速发现错误)。另一道优化题:
写法 1:
for(i=0;i<8;i++) {
x = i + Y + J*7;
printf("%d",x);
}
写法 2:
S = Y + J*7;
for(i=0;i<8;i++) {
printf("%d",i + S);
}
正确答案:写法 2 更优
解析:
Y+J*7 是固定值,写法 1 会在循环内重复计算 8 次,写法 2 把计算提到循环外,只算 1 次,提高执行效率(虽然代码稍显繁琐,但性能更优)。避坑技巧:
条件判断中,把常量放左边(避免赋值错误);
循环内的固定计算(比如表达式、函数调用),尽量提到循环外,减少重复执行。
四、高频考点 4:C 与 C++ 的核心区别 —— 理解设计思路
面试真题
“如果一个程序需要大量运算、好的用户界面,还需要与其他软件交流,该如何选择语言?”核心答案:
C 是结构化语言:侧重 “算法和数据结构”,适合底层运算、嵌入式开发,核心是 “过程控制”;
C++ 是面向对象语言:侧重 “对象模型”,适合复杂项目(比如带 UI 的软件),核心是 “封装、继承、多态”。
选型建议:
大量运算(比如数值计算、矩阵运算):用 C/C++(性能强),或 Fortran/MATLAB(专业运算场景);
用户界面:用.NET(Windows 环境)或 Java(跨平台),UI 开发效率高;
软件交互:.NET/Java 支持 COM、数据库访问,方便与其他软件对接。
避坑技巧:
别盲目追求 “语言万能”,根据模块功能选型,比如核心运算用 C++,UI 用.NET,通过接口对接,兼顾性能和开发效率。
五、笔试实战:这些易错点汇总
局部变量未初始化,值是随机的(全局变量默认初始化为 0,局部变量不会);
C++ 中 const 常量必须初始化(比如 const int a = 5; 不能只写 const int a;);
函数重载的条件:参数类型、个数、顺序不同(返回值不同不算重载);
extern"C" 仅用于 C 和 C++ 混编,告诉编译器按 C 规则处理函数名