C语言面试大集合

1、static有什么用途(至少说明两种)?
(1)限制变量的作用域
(2)设置变量的存储域

2、引用与指针有什么区别?
(1)引用必须被初始化,指针不必。
(2)不存在指向空值的引用,但是存在指向空值的指针。

3、描述实时操作系统的基本特性:
答:在特定时间内完成特定的任务,实时性与可靠性。

4、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
答:全局变量储存在静态数据库,局部变量在堆栈。

5、什么是平衡二叉树?
答:左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。左右子树深度相等。

6、堆栈溢出一般是由什么原因导致的?
答:没有回收垃圾资源。

7、什么函数不能声明为虚函数?
答:constructor。

8、冒泡排序算法的时间复杂度是什么?
答:O(n^2)。

9、写出float x 与“零值”比较的if语句。
答:if(x>0.000001&&x<-0.000001)

10、 Internet采用哪种网络协议?该协议的主要层次结构?
答:tcp/ip。 应用层/传输层/网络层/数据链路层/物理层。

11、Internet物理地址和IP地址转换采用什么协议?
答:ARP (Address Resolution Protocol)(地址解析協議)。

12、IP地址的编码分为哪俩部分?
答:IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分
哪些是网络位哪些是主机位。

13、用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出
C程序。
答:循环链表,用取余操作做。
for(i=0; i<N; i++)
{
if(i%M==0) printf("%d",M);
}

14、不能做switch()的参数类型是:
答:switch的参数不能为实数型。

15、局部变量能否和全局变量重名?
答:可以。,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不
会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,
比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环
体内。

16、如何引用一个已经定义过的全局变量?
答:extern。
可以用引用头文件的方式,也可以用extern关键字。如果用引用头文件方式来引用某个在
头文件中声明的全局变理,假定你将那个变量写错了,那么在编译期间会报错。如果你用ex
tern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

17、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以。
在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初
值,此时连接不会出错,即用extern来引用。

18、语句for( ;1 ;)有什么问题?它是什么意思?
答:没问题。和while(1)的作用相同。

19、do……while和while……do有什么区别?
答:前者先执行循环体,再判断条件;后者先判断条件,再执行循环体。

20、请写出下列代码的输出内容:
#include<stdio.h>
main()
{
int a,b,c,d;
a=10;//b=10
b=a++; //a=11
c=++a;//a=12,c=12
d=10*a++;//d=120,a=13
printf(“b,c,d:%d,%d,%d”,b,c,d);
return 0;
}
答:10,12,120.

21、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么
区别?static函数与普通函数有什么区别?
答:在同一个源文件的普通全局变量就是static全局变量。全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是
改变了它的存储方式即改变了它的
生存期
。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明
为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以
外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其
他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依
据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调
用中维持一份拷贝。

22、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存
在于( 堆)中。

23、设有以下说明和定义:
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:52_
解释:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所
以它的大小是20。
data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.
所以结果是 20 + 32 = 52。
当然…在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 =
20。

24、队列和栈有什么区别?
答:队列先进先出,栈后进先出。

25、写出下列代码的输出内容
#include<stdio.h>
int inc(int a)
{
return(++a);
}
int multi(inta,intb,intc)
{
return(c=a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int
,int
,int
);

void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a;
show(multi,10,&a);
return 0;
}
答:110。

26、请找出下面代码中的所以错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
1、#include"string.h"
2、main()
3、{
4、 charsrc=“hello,world”;
5、 char
dest=NULL;
6、 int len=strlen(src);
7、 dest=(char*)malloc(len);\
8、 char* d=dest;
9、 char* s=src[len];\
10、 while(len–!=0)
11、 d++=s–;\
12、 printf("%s",dest);\
13、 return 0;
14、}

答:方法一:
方法1:
int main(){
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加\0
printf("%s\n",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}方法二:
#include <stdlib.h>
#include <string.h>main()
{char str[]="hello,world";int len=strlen(str);char t;for(int i=0; i<len/2; i++){t=str[i];str[i]=str[len-i-1];str[len-i-1]=t;}printf("%s",str);return 0;
}

27、-1,2,7,28,?,126请问28和126中间那个数是什么?为什么?
答:第一题的答案应该是4^3-1=63
规律是n^3-1(当n为偶数0,2,4)
n^3+1(当n为奇数1,3,5)

28、用两个栈实现一个队列的功能?要求给出算法和思路!
答:设2个栈为A,B, 一开始均为空。队列实现效果:头删尾插(FIFO)。栈:在栈顶进行插入和删除(LIFO)。
入队:
将新元素push入栈A;
出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;
(3)将栈B的栈顶元素pop出;
这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。
思路:压入,倒出,再弹出。

29、在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?
答:atol。
功能:把字符串转换成长整行数。
用 法: long atol(const char *nptr);
程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *str = “98765432”;
l = atol(lstr);
printf(“string = %s integer = %ld\n”, str, l);
return(0);
}

30、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
答:c用宏定义define,c++用inline。

31、直接链接两个信令点的一组链路称作什么?
答:PPP点到点连接。

32、接入网用的是什么接口?

33、voip都用了那些协议?

34、软件测试都有那些种类?
答:黑盒:针对系统功能的测试 。 白合:测试函数功能,各函数接口。

35、确定模块的功能和模块的接口是在软件设计的那个队段完成的?
答:概要设计阶段。

36、enum string
{
x1,
x2,
x3=10,
x4,
x5,
}X;
问:X= 0,1,11,2,13中的某一个;

37、unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5= 0x801005;
p2+5= 0x801014;

39、Ethternet链接到Internet用到以下那个协议?
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
答:B

40、属于网络层协议的是:
A.TCP;B.IP;C.ICMP;D.X.25
答:C

41、Windows消息调度机制是:
A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;
答:C

42、.unsigned short hash(unsigned short key)
{
return (key>>)%256;
}
请问hash(16),hash(256)的值分别是:
A.1.16; B.8.32; C.4.16; D.1.32
分析:首先我们不知道这道题的右移位数是多少,也不知道这道题是不是出题有问题,现在我们来看看答案
首先%256肯定不起作用,因为16%256移动一位以后都小于256,所以只要考虑key> > n即可

我们考虑16=10H,他右移可能的结果是
移动位数,结果
1 8
2 4
3 2
4 1
对比四个答案
A.1.16;B.8.32;C.4.16;D.1.32
A: n=4,带入key=256得到结果是16,match
B: n=1,带入key=256结果是128,不match
C: n=2,带入key=256结果是64,不match
D: n=3,带入key=256结果是16,不match

所以答案就是A,移动位数为4

43、请问下面程序有什么错误?

   int a[60][250][1000],i,j,k;for(k=0;k<=1000;k++)for(j=0;j<250;j++)for(i=0;i<60;i++)a[j][k]=0;

把循环语句内外换一下,i最外层,k最内层。

44、#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg)
{
unsigned char ucCmdNum;


for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdNum++)
{
…;
}
找错:死循环。ucCmdNun是unsigned char类型,最大到255。

45、以下是求一个数的平方的程序,请找出错误:
#define SQUARE(a)((a)*(a))
int a=5;
int b;
b=SQUARE(a++);
答:a的值发生变化。

46、typedef unsigned char BYTE
int examply_fun(BYTE gt_len; BYTE *gt_code)
{
BYTE *gt_buf;
gt_buf=(BYTE *)MALLOC(Max_GT_Length);

if(gt_len>Max_GT_Length)
{
return GT_Length_ERROR;
}

}
答:examply_fun函数参数不应是分号,要释放内存。

47、ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?
答:应用层
表示层
会话层
运输层
网络层
物理链路层
物理层
tcp/udp是属于运输层,
tcp/udp优缺点:
TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好。
udp: 不提供稳定的服务,包头小,开销小。

48、(void )ptr 和 ((void**))ptr的结果是否相同?其中ptr为同一个指针。
答:(void )ptr 和 ((void**))ptr值是相同的。

49、int main()
{
int x=3;
printf("%d",x);
return 1;
}
问函数既然不会被其它函数调用,为什么要返回1?
答:mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息。

50、要对绝对地址0x100000赋值,我们可以用
(unsigned int*)0x100000 = 1234;//地址强制转换
那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?
*((void (*)( ))0x100000 ) ( );
首先要将0x100000强制转换成函数指针,即:
(void (*)())0x100000
然后再调用它:
*((void (*)())0x100000)();
用typedef可以看得更直观些:
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();//可理解为函数名换成了地址

51、已知一个数组table,用一个宏定义,求出数据的元素个数
#define NTBL
#define NTBL (sizeof(table)/sizeof(table[0]))

52、面试题: 线程与进程的区别和联系? 线程是否具有相同的堆栈? dll是否有独立的堆栈?
答:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。
每个线程有自己的堆栈。
DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?
以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃。

53、unsigned short A = 10;
printf("~A = %u\n", ~A);
char c=128;
printf(“c=%d\n”,c);
输出多少?并分析过程
第一题,~A =0xfffffff5,int值 为-11,但输出的是uint。所以输出4294967285。
第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128。

这两道题都是在考察二进制向int或uint转换时的最高位处理。
分析下面的程序:
void GetMemory(char **p,int num)
{
*p=(char *)malloc(num);

}
int main()
{
char *str=NULL;

GetMemory(&str,100);strcpy(str,"hello");free(str);if(str!=NULL)
{strcpy(str,"world");
}   printf("\n str is %s",str);
getchar();

} 输出结果是什么?
答:输出结果是str is world。
因为free释放的只是str指向的内存空间,但是str的值还是存在的。所以一般free之后,有个好习惯就是将str=NULL。
这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。
当你malloc一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些
),然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点),并将可用
内存的地址返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你
是可以继续访问这块地址的,但最好不要这么做。

54、
sizeof()和初不初始化,没有关系;
strlen()和初始化有关。

55、char (*str)[20];/str是一个数组指针,即指向数组的指针./
char *str[20];/str是一个指针数组,其元素为指针型数据./

56、long a=0x801010;
a+5=?
0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为8392720
,再加上5就是8392725罗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARP 地址解析协议

目的 作用是IP地址和MAC地址关联。只要有TCP/IP协议的机器中会有一张ARP表&#xff0c;在windows系统中 运行-----cmd------arp –a&#xff0c;就可以看到当前所连接的设备的ip地址和对应的MAC地址。 所谓地址解析&#xff08;address resolution&#xff09;就是主机在发送前…

陆奇给工程师们的5个建议

大家好&#xff0c;我是写代码的篮球球痴今天分享的文章是陆奇以前在百度一次内部演讲给工程师们提的5点要求&#xff0c;个人觉得对很多人非常有益&#xff0c;大家可以耐心一读。至于陆奇是谁&#xff0c;可以直接搜索&#xff0c;借微软CEO斯蒂芬鲍尔默对他的评价 : 陆奇集资…

leetcode 764.Largest Plus Sign

根据题意的话就是在非0的地方开始寻找上下左右分别能够走到的最大步长的。 那么使用暴力的方法竟然leetcode还是给过了。 class Solution { public:int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) {int res0;vector<vector<int>>…

16道C面试试题

预处理器&#xff08;Preprocessor&#xff09; 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情&#xff1a; 1). #define 语法的基本知识…

云服务器成势?

在许多应用领域&#xff0c;刀片服务器正在大规模替代传统的塔式服务器。螳螂捕蝉&#xff0c;黄雀在后。刚刚兴起的云服务器会不会成为刀片服务器的替代者呢&#xff1f; 2010年12月&#xff0c;北京天地超云科技有限公司&#xff08;以下简称天地超云&#xff09;首台云服务器…

每个电子工程师都埋藏着一颗游戏的心

在电子森林推文 700个字节的代码在ATtiny10里跑一个游戏[1] 介绍了一个 开源小游戏RunTiny[2] .用了&#xff1a;一个AVR单片机ATtiny10微控制器&#xff08;只有6个脚&#xff0c;Digikey上0.3美元一颗&#xff09;一个128*32的OLED显示屏一个按键一个电池 - 3.3V&#xff5e;…

python之file 方法

file 对象使用 open 函数来创建&#xff0c;下表列出了 file 对象常用的函数&#xff1a; 1 file.close() close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作&#xff0c; 否则会触发 ValueError 错误。 close() 方法允许调用多次。 当 file 对象&a…

100条经典C笔试题

题目来源&#xff1a; 1、中兴、华为、慧通、英华达、微软亚洲技术中心等中 外企业面试题目&#xff1b; 2、C 语言面试宝典(林锐《高质量编程第三版》)。 说明&#xff1a; 1、部分C 语言面试题中可能会参杂部分和C 相关的知 识&#xff0c;为了保持题目的灵活性故保留&#x…

Linux kernel 中模块化的平台驱动代码介绍

介绍在linux kernel中通过module_platform_driver来实现模块化平台驱动。大量的设备驱动程序都基于该种方式来实现&#xff0c;使用频次非常的高&#xff0c;在linux kernel 5.4.124的代码中搜索module_platform_driver共有2356次引用。这个宏的使用方式大相径庭&#xff0c;有…

Golang切片的三种简单使用方式及区别

概念 切片&#xff08;slice&#xff09;是建立在数组之上的更方便&#xff0c;更灵活&#xff0c;更强大的数据结构。切片并不存储任何元素而只是对现有数组的引用。 三种方式及细节案例 ①定义一个切片&#xff0c;然后让切片去引用一个已经创建好的数组 package main import…

这样给数组初始化,你肯定没有见过

今天在朋友圈看到一个朋友发的图片是给数组初始化的代码截图如下&#xff1a;我看到这个代码&#xff0c;也让我着实惊了一下&#xff0c;写代码这么久&#xff0c;也没有见过这样子初始化的。这个代码是出自海思的SDK里面的&#xff0c;华为的大牛还是很多啊&#xff0c;学习C…

如何让自己升薪

1) 经理应该好好看一看年度工作总结&#xff0c;这样他就能知道我对同事提供了多大的帮助。 2)如果一个程序员的工作很容易完成&#xff0c;那就不要等他主动来索取更多的任务。相反&#xff0c;积极交给他更加有挑战性的复杂的任务。 3) 在谈话中不要阻止建设性的批评。这个经…

ARM知识点

1、ARM有几种工作模式&#xff1f; 答&#xff1a;有7个基本工作模式&#xff1a;用户模式&#xff08;user&#xff09;、系统模式&#xff08;system&#xff09;、数据访问中止模式&#xff08;abort&#xff09;、未定义指令中止模式&#xff08;undef&#xff09;、快速中…

《你不知道的JavaScript》中卷 KYLE SIMPSON 著 单业 姜南 译

一部分 类型和语法 1.内置类型&#xff08;7&#xff09; null、undefined、boolean、number、string、object、symbol(ES6新增&#xff0c;符号) 2.toString()和Json.stringify() (1)字符串、数字、布尔值和null的JSON.stringify()规则与toString基本相同 (2)如果传递给JSON.…

CP命令引发的思考

转自&#xff1a;OSC开源社区今天同事用 cp 命令&#xff0c;把他给惊到了&#xff01;背景是这样的&#xff1a;他用 cp 拷贝了一个 100 G的文件&#xff0c;竟然一秒不到就拷贝完成了&#xff01;用 ls 看一把文件&#xff0c;显示文件确实是 100 G。sh-4.4# ls -lh -rw-r-…

安装windows XP或者2003时提示找不到硬盘驱动器的解决办法(总结)转载

&#xff08;本文属于转载&#xff09; 由于SATA接口在近年才推出&#xff0c;Windows XP问世的时候&#xff0c;还没有它&#xff0c;所以安装Windows XP时&#xff0c;需要调用SATA驱动程序&#xff0c;而你又没有提供相应的驱动&#xff0c;就会出现无法识别硬盘的错误。 不…

C宏定义注意事项

1、带参数的宏与函数的优缺点 2、宏定义一个函数时&#xff0c;需要注意每个参数都需要用括号括起来。 如&#xff1a;#define Min(a,b) ((a)<(b)?(a):(b)) 3、宏定义一年中的秒数 #define SECONDE_OF_YEAR 606024365UL &#xff08;√&#xff09; #define SECONDE_OF_YE…

不要再来北上广深了

大家好&#xff0c;我是写代码的篮球球痴最近我们的一个离职群里面讨论一个问题&#xff0c;就是在北上广深工作的性价比问题&#xff0c;我有几个同事这样描述。一线城市确实会遇到一些机会&#xff0c;也有可能会遇到一些改变命运的机会。不过对于生活来说&#xff0c;一线城…

mogndb 慢查询

0 摘要 在MySQL中&#xff0c;慢查询日志是经常作为我们优化查询的依据&#xff0c;那在MongoDB中是否有类似的功能呢&#xff1f;答案是肯定的&#xff0c;那就是开启Profiling功能。该工具在运行的实例上收集有关MongoDB的写操作&#xff0c;游标&#xff0c;数据库命令等&a…

Linux命令中正则表达式的运用

一、正则表达式简介 事实上&#xff0c;正则表达式不仅适用于linux&#xff0c;多种编程语言中也可以使用到它&#xff0c;因为它实际上是人们对于某种规律的表达方式。 如果要把他的所有应用都讲上的话那这篇文章会变的太长以至于无法阅读&#xff0c;我只介绍他在linux下和几…