首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
哦哦哦2
辽宁工程技术大学 测试工程师
发布于辽宁
关注
已关注
取消关注
@HellowordX:
C语言面试高频(一)
1.全局变量和局部变量的区别全局变量:在函数外部声明的变量,整个程序都可以访问。声明时会被默认初始化,可以在任何函数中使用。生命周期长,整个程序执行期间都存在。全局变量存储在全局数据区(data)中局部变量:在函数内部或代码块内部声明的变量,只能在所属的函数或代码块中访问。声明时没有默认初始化,需要手动赋值才能使用。生命周期短,只在所属的函数或代码块的执行期间存在。局部变量存储在栈区(stack)2.int main(int argc, char ** argv)函数中,参数argc和argv分别代表什么意思? 在C语言中,主函数int main(int argc, char **argv)用来作为程序的入口,argc和argv是其参数。argc是整型参数,表示命令行参数的个数。它记录了程序在运行时附带的命令行参数的数量,至少为1,因为程序自身的名称也算一个参数。argv是字符指针数组,用来存储命令行参数的字符串。每个元素指向一个以null结尾的字符串,表示一个命令行参数。argv[0]指向程序的名称,argv[1]指向第一个参数,以此类推,argv[argc-1]指向最后一个参数。举个例子,假设我们在命令行中执行以下命令:./program arg1 arg2 arg3那么argc的值为4,argv的值如下所示:argv[0] = "./program"argv[1] = "arg1"argv[2] = "arg2"argv[3] = "arg3"argv[4] = NULL3.static关键字声明静态变量,使其生命周期延长或作用域限定在当前文件内。声明静态函数,使其作用域限定在当前文件内。声明静态成员变量,使其属于类本身而不是对象,多个对象共享同一份内存。使用静态限定符,控制变量的初始化和生命周期。 举例:在函数内部使用 static:#include <stdio.h>void increment() { static int count = 0; count++; printf("调用次数:%d\n", count);}int main() { for (int i = 0; i < 5; i++) { increment(); } return 0;}在每次调用 increment 函数时,count 的值会持续增加,而不会被重置。这是因为 count 被声明为 static,其生命周期跨越了函数调用。 2.在文件作用域使用 static://这里的例子是防止同学们以后要避免这样去使用。更好的去理解static的隐藏性// File1.cstatic int globalVar = 10; //变量只可在file1.c里使用// File2.cextern int globalVar;int main() { printf("globalVar 的值:%d\n", globalVar); return 0;}在 File1.c 文件中,我们声明了一个具有文件作用域的静态全局变量 globalVar。在file2里是extern不到。4.const关键字值不可修改:一旦常量被赋值后,其值将保持不变,不能再对其进行修改。作用域限制:常量的作用域通常被限制在声明时所在的作用域内部编译时确定:常量的值在编译时就已确定,并在运行时保持不变举例:1.使用 const 声明常量变量:#include <stdio.h>int main() { const int PI = 3.14; const char GREETING[] = "Hello, world!"; return 0;}在这个例子中,我们使用 const 关键字来声明了一个整数常量 PI 和一个字符数组常量 GREETING。这些常量在声明后不能被修改。2.使用 const 参数声明函数:#include <stdio.h>int sum(const int a, const int b) { return a + b;}int main() { int num1 = 5, num2 = 10; int result = sum(num1, num2); printf("两数之和:%d\n", result); return 0;}在 sum 函数的参数中,我们使用 const 关键字声明了 a 和 b 为只读参数。在函数内部不能修改这些参数的值。3.使用 const 修饰函数返回值:#include <stdio.h>const char* getMessage() { return "Hello, world!";}int main() { const char* message = getMessage(); printf("消息:%s\n", message); return 0;}在这个例子中,getMessage 函数的返回类型前面的 const 关键字指示函数返回一个指向常量字符的指针。返回的字符串不能通过指针进行修改。5.const 和 #define的区别const是一种编译器关键字,而#define是预处理器指令。const在编译阶段进行处理,而#define在预处理阶段进行处理。const定义的常量具有类型,而#define没有。const在声明时需要指定常量的类型,编译器会进行类型检查。而#define只是简单的文本替换,没有类型检查。const定义的常量有作用域限制,可以根据声明位置的不同而有不同的作用域。而#define定义的常量没有作用域限制,整个程序中都有效。const生成符号表中的一个符号,有明确的名字和类型,可以进行调试和符号查找。而#define没有生成符号表,不会产生对应的符号。6.extern关键字声明一个在其他文件中定义的外部变量或函数。告诉编译器在链接过程中需要找到对应的定义。允许在当前文件中使用这些外部变量或函数而不需要重新定义。举例:// File1.cextern int globalVar = 10;// File2.c#include <stdio.h>extern int globalVar;int main() { printf("globalVar 的值:%d\n", globalVar); return 0;}在 File1.c 中,我们使用 extern 关键字来定义一个全局变量 globalVar,并初始化为 10。在 File2.c 中,我们使用 extern 关键字来声明同名的全局变量 globalVar,以表示它是在其他源文件中定义的。然后,在 main 函数中,我们可以访问并打印 globalVar 的值。7.#include<> 和 #include""的区别使用 #include<>:用于包含系统提供的标准库头文件。在编译器的搜索路径中寻找头文件。编译器会先在系统的标准头文件目录中查找,如果找不到则报错。使用 #include"":用于包含用户自定义的头文件或项目中使用的其他非系统头文件。在当前源文件的相对路径或指定的绝对路径中寻找头文件。编译器会首先在当前源文件所在目录中查找,如果找不到再根据指定的路径查找。8.C语言的基本类型有哪些(32位系统),占用字节空间char1short int2int/long int4char * /int * /任何的指针4float4double89.头文件#ifndef/#define/#endif的作用#ifndef:用于判断当前头文件是否已经被包含。如果该宏之前没有被定义过,则继续编译下面的代码。如果该宏之前已被定义过,则跳过下面的代码,直接到 #endif。#define:用于定义一个宏。通过定义一个特定的宏名称,例如MY_HEADER_H表示头文件已被包含。#endif:用于结束 #ifndef / #define / #endif 块。标记了头文件的结束位置。通过使用这种组合,可以防止同一个头文件被多次包含,以避免重复定义和编译错误。举例:#ifndef MYHEADER_H // 如果 MYHEADER_H 还没有被定义#define MYHEADER_H // 定义 MYHEADER_Hvoid sayHello(); // 函数声明const int MAX_VALUE = 100; // 常量定义#endif // 结束条件编译上述是一般的使用模板10.volatile声明的作用volatile声明的变量是指可能会被意想不到地改变的变量,这样编译器就不会轻易优化该变量。它主要用于多线程编程中,用来保证共享变量的内存可见性。(注:指针也可用volatile)三个常见场景多线程中的共享变量中断程序中访问到的非自动变量并行设备的硬件寄存器11.strcpy与memcpy的区别strcpy:用于字符串拷贝。源字符串中的内容会被复制到目标字符串中,直到遇到字符串结束符 ‘\0’。目标字符串必须有足够的空间来存储被复制的内容,否则可能导致缓冲区溢出。memcpy:用于字节级别的内存拷贝。可以拷贝任意类型的内存块,不仅限于字符串。不会检查字符串结束符,通过指定要拷贝的字节数进行拷贝。可以用于拷贝部分或完整的数组、结构体等。安全性:strcpy函数不进行源字符串长度的检查,如果源字符串太长,可能会导致目标字符串缓冲区溢出。memcpy函数本身没有长度限制,应确保源和目标内存区域不会发生重叠,否则可能会导致数据损坏。为了提高安全性,可以使用像strcpy_s、strncpy_s这样提供了长度限制的函数。总结:strcpy适用于字符串拷贝,可以自动识别字符串结束符。memcpy适用于字节级别的内存拷贝,适用于任意类型的数据。12.一个变量既可以是const还可以是volatile类型吗可以,一个变量可以同时具有const和volatile。const表示变量的值不能被改变,而volatile属性表示变量的值可能会被外部程序改变。13.sizeof与strlen的区别sizeof:用于获取数据类型或变量的字节大小。可以接受多种参数,包括数据类型、变量名、数组名等。返回的是整个数据类型或变量占用的内存空间大小。strlen:用于获取以’\0’结尾的字符串的实际长度。在运行时计算,需要遍历字符串的内容来确定长度。返回的是字符串中的字符个数,不包括字符串结束符’\0’。举例:char str[] = "Hello";size_t size_str = sizeof(str);size_t length_str = strlen(str);// size_str 的值为 6,因为包括字符串 "Hello" 的 5 个字符和结尾的 '\0',共 6 个字节// length_str 的值为 5,因为字符串 "Hello" 有 5 个字符,不包括结尾的 '\0'注意事项:sizeof返回的是静态的大小,而strlen返回的是实际的字符串长度。在使用strlen时要确保操作的对象是以’\0’结尾的字符串,否则可能出现不确定的结果。sizeof可以用于任何数据类型或变量,而strlen只适用于字符串。14.常见的变量定义int a;:定义了一个变量 a,它的类型是 int。int *a;:定义了一个指针 a,它指向 int 类型的变量。int **a;:定义了一个指针 a,它指向一个指向 int 类型的指针。int a[10];:定义了一个数组 a,该数组有 10 个元素,每个元素是 int 类型。int *a[10];:定义了一个数组 a,该数组有 10 个元素,每个元素是 int 类型的指针。int (*a)[10];:定义了一个指针 a,该指针指向一个数组,该数组有 10 个元素,每个元素是 int 类型。int (*a)(int);:定义了一个指针 a,该指针指向一个参数是 int,返回值是 int 的函数。int (*a[10])(int);:定义了一个数组 a,该数组的元素是一个指向参数是 int,返回值是 int 的函数指针。15.数组名与指针的区别数组名:是一个常量指针,指向数组的首元素。大小固定为整个数组的大小。无法被改变或重新赋值。无法进行指针运算。指针:是一个变量,存储一个内存地址。大小固定为指针类型的大小。可以指向任意类型的对象。可以被改变或重新赋值。可以进行指针运算,如加法、减法等。
点赞 28
评论 23
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-08 15:54
海康威视_技术支持部_云存储开发工程师(准入职员工)
海康威视内推
真实工作体验!【工作时间】 海康实行弹性工作制,一般九点半之前到公司就可以。对于实习生来说,一般只要打够八个半小时的卡就好了。这点还是不错的,早点上班就可以早点下班。正式工可能需要大小周,具体看部门要求。实习生应该都是双休的,不过周末去的话也会给你发工资。中午休息一个半小时,大部分员工都会自己买午休床。 【公司环境】 实习报到的时候会给你分配一台电脑,一般都是无盘机,配置很普通,不允许自己带电脑。海康对网络管控比较严格,很多网站不能访问。想要访问外网的话只能通过虚拟机,然后通过公司内部的文件传输工具传到红网,这点还是比较麻烦的。 海康食堂还行,样式挺丰富的,价格也不贵。早餐我一般在5-10r,...
海康威视公司氛围 594人发布
点赞
评论
收藏
分享
08-06 11:41
苏州大学 芯片研发
有一句话,证明你在大厂上班
大厂小伙伴,都怎么交流呀?请用大厂的口吻跟我说句话,让我感受一下大厂的氛围和气息
职场不咸鱼:
现在有时间吗,我们快速对下
上班后和你想的一样吗?
点赞
评论
收藏
分享
06-30 08:52
广东食品药品职业学院 C++
有人内推嘛,好难找啊一个面试都收不到
Twilight_m...:
表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞
评论
收藏
分享
07-14 08:00
门头沟学院 数据仓库
牧原这么逆天
校招进去军训?😂
彧未sr:
查看图片
投递牧原集团等公司10个岗位
点赞
评论
收藏
分享
08-10 17:16
合合信息_运营管理_HR
合合信息秋招——小而美厂
不知道现在大家找工作都看啥,头部大企业确实可以给更大的平台和保底空间,至少辞职了也有title,但是也可以看看发展中的小厂,想来上海的同学可以看看咱们,小赛道,但是发展很好,基本做到了行业top级别合合信息估计大家都没听过,我当年秋招之前也没听过,但公司的一个产品应该知名度还行,就是扫描全能王这个软件。公司成立挺久了,没记错的话是2006年,应该是最早一批搞大数据的企业。部门氛围很好,正式员工一般也不加班,早上9.30到公司都还没啥人,免费早晚餐,六点半晚餐,七点半应该就没人了。ld,mt都很好相处,弹性打卡,最晚十一点。正式员工直接不用打卡。不了解应届生工资,但如果是应届生进去的话,感觉真的...
xxxxOxo:
为什么挂我简历
合合信息公司福利 342人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
25年秋招精心整理的最新互联网大厂笔面试题集合
1.5W
2
...
字节秋招-后端开发-一面
8619
3
...
暑期实习转正自评,你就这么写!
6680
4
...
26届秋招建议
6102
5
...
本华为OD终于翻身!(百度后端面经)
4967
6
...
26秋招-拓竹嵌入式软件面经
4606
7
...
总结常用的拖offer的几种话术
3992
8
...
字节秋招意向
3660
9
...
影石嵌入式驱动开发面经
2712
10
...
字节二面-半技术半聊天?
2274
创作者周榜
更多
正在热议
更多
#
我的秋招“寄”录
#
17746次浏览
203人参与
#
你最近一次加班是什么时候?
#
73491次浏览
376人参与
#
去哪儿旅行秋招
#
224152次浏览
3176人参与
#
实习的内耗时刻
#
19233次浏览
274人参与
#
我的AI电子员工
#
10271次浏览
68人参与
#
你上一次给父母打电话是什么时候
#
7690次浏览
79人参与
#
腾讯大前端岗位热招中
#
15271次浏览
171人参与
#
牛友打假中心
#
96361次浏览
2679人参与
#
大城市找工作会更容易吗
#
43906次浏览
351人参与
#
学历贬值真的很严重吗?
#
31664次浏览
208人参与
#
规定下班时间vs实际下班时间
#
11918次浏览
101人参与
#
独居后,你的生活是更好了还是更差了?
#
6765次浏览
104人参与
#
工作上你捅过哪些篓子?
#
9284次浏览
68人参与
#
每个月的工资都是怎么分配的?
#
59712次浏览
596人参与
#
秋招签约后的心态变化
#
87452次浏览
836人参与
#
你觉得找工作该拿大厂还是小厂练手
#
199867次浏览
1757人参与
#
被AI治愈的瞬间
#
64038次浏览
634人参与
#
面试被问期望薪资时该如何回答
#
268470次浏览
1542人参与
#
奇葩时刻大赏
#
57317次浏览
237人参与
#
生化医药面经大本营
#
121957次浏览
483人参与
#
秋招想进国企该如何准备
#
81541次浏览
442人参与
#
得物求职进展汇总
#
103877次浏览
833人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务