C语言面试基础题,程序员必备面试题~

94 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

1、不能做switch()的参数类型?

switch的参数不能为实型。

2、语句for( ;1 ;)有什么问题?

和while(1)相同,无限循环。

3、do……while和while……do有什么区别?

前一个循环一遍再判断,后一个判断以后再循环

4、三种基本的数据模型?

按照数据结构类型的不同,将数据模型划分为层次模型、网状模型和关系模型。

5、判断一段程序是由C 编译程序还是由C++编译程序编译的?

#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif

6、无限循环的几种写法?

(1)while(1){}

(2)for(;;){}

(3)Loop: ... goto Loop;

7、ASSERT()的作用?

ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,可以这样写程序:

......

ASSERT( n != 0);

k = 10/ n;

.....

ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。

assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。

8、system("pause");的作用?

系统的暂停程序,按任意键继续,屏幕会打印,"按任意键继续。。。。。"省去了使用getchar();

9、C++的类和C里面的struct有什么区别?

C++中的类具有成员保护功能,并且具有继承,多态这类OO特点,而C里的struct没有。C里面的struct没有成员函数,不能继承,派生等等。

10、动态连接库的两种方式?

(1)载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。

(2)运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。

11、程序什么时候应该使用多线程?

(1)耗时的操作使用线程,提高应用程序响应

(2)并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。

(3) CPU 系统中,使用线程提高CPU利用率

(4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

其他情况都使用单线程。

12、多进程与多线程的区别?

(1)进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。

(2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

(3)两者都可以提高程序的并发度,提高程序运行效率和响应时间。

(4)线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

13、用变量a给出下面的定义

a) 一个整型数(An integer)

b) 一个指向整型数的指针(A pointer to an integer)

c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)

d) 一个有10个整型数的数组(An array of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)

f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer

argument and return an integer )

答案是:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer