C语言经典笔面试题(下)
2020-08-30 10:54
1511 查看
C语言经典笔面试题—下
- 1、已知一个数组table,用一个宏定义,求出数据的元素个数。
- 2、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++ 中应用什么实现?
- 3、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
- 4、以下为Linux下的32位C程序,请计算sizeof的值。
- 5、请写出bool flag 与“零值”比较的if 语句
- 6、请写出int 变量n 与“零值”比较的if 语句
- 7、请写出char *p 与“零值”比较的if 语句
- 8、以下是求一个数的平方的程序,请找出错误
- 9、有符号数转无符号数
- 10、怎么判断单向链表中是否有环?
- 11、下面的代码输出是什么,为什么?
- 12、switch()的参数类型可以是实型吗?
- 13、头文件包含
- 14、头文件中的ifndef/define/endif 干什么用?
- 15、嵌入式系统经常要求程序员去访问某特定的内存位置。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。
1、已知一个数组table,用一个宏定义,求出数据的元素个数。
#define NTBL(table) (sizeof(table)/sizeof(table[0]))
2、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++ 中应用什么实现?
c用宏定义,c++ 用inline函数
3、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
注意末尾的UL。
4、以下为Linux下的32位C程序,请计算sizeof的值。
char str[] = “Hello” ; char *p = str ; int n = 10; void Func ( char str[100]) { } void * p = malloc( 100 );
请计算
(1)sizeof (str ) =
(2)sizeof ( p ) =
(3)sizeof ( n ) =
(4)sizeof( str ) =
(5)sizeof ( p ) =
答案:
(1)6、(2)4 、(3 )4 (4)4 (5)4
5、请写出bool flag 与“零值”比较的if 语句
if ( flag ) if ( !flag )
6、请写出int 变量n 与“零值”比较的if 语句
if ( n == 0 ) if ( n != 0 )
7、请写出char *p 与“零值”比较的if 语句
if (p == NULL) if (p != NULL)
8、以下是求一个数的平方的程序,请找出错误
#define SQUARE(a) ((a)*(a)) int a = 5; int b; b = SQUARE(a++);
宏在预编译时会以直接替换的形式展开。涉及到宏的地方,谨慎使用+±- ,该程序的结果为42。
9、有符号数转无符号数
#define Max_CB 500 void LmiQueryCSmd(StructMSgCB * pmsg) { unsigned char ucCmdNum; ...... for(ucCmdNum=0;ucCmdNum< Max_CB;ucCmdNum++) { ......; } }
这段代码执行有什么问题?
死循环。
unsigned char //无符号字符型表示范围0~255
char // 有符号字符型 表示范围-128~127
10、怎么判断单向链表中是否有环?
答:用两个指针来遍历这个单向链表,第一个指针p1,每次走一步;第二个指针p2,每次走两步;当p2 指针追上p1的时候,就表明链表当中有环路了。
int testLinkRing(Link *head) { Link *t1=head,*t2=head; while( t1->next && t2->next) { t1 = t1->next; if (NULL == (t2 = t2->next->next)) return 0; // 无环 if (t1 == t2) return 1; } return 0; }
11、下面的代码输出是什么,为什么?
void foo(void) { unsigned int a = 6; int b = -20; (a+b> 6)? puts("> 6") : puts("<= 6"); }
这个问题测试你是否懂得C语言中的整数自动转换原则,
当表达式中存在有符号类型和无符号类型时,所有的数都自动转换为无符号类型。因此-20 变成了一个非常大的正整数,所以该表达式计算出的结果大于6 。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
12、switch()的参数类型可以是实型吗?
不可以。
13、头文件包含
#include <filename.h> 和#include “filename.h” 有什么区别?
对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h ;
对于#include “filename.h” ,编译器从用户的工作路径开始搜索filename.h 。
14、头文件中的ifndef/define/endif 干什么用?
防止该头文件被重复引用。
15、嵌入式系统经常要求程序员去访问某特定的内存位置。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。
int * ptr; ptr= (int *)0x67a9; *ptr = 0xaa66;
相关文章推荐
- 2017php经典面试题 1、PHP语言的一
- 约瑟夫环问题分析-C语言经典面试题
- C语言经典面试题---八皇后问题
- 华为C语言经典面试题
- 面试点:C语言经典面试题(C语言面试题分析之五)
- C语言经典面试题100道(校对详解版)
- 转载:嵌入式c语言经典面试题
- c语言编译原理及IPC通信经典面试题
- 华为C语言经典面试题
- 李洪强经典面试题40-可能碰到的iOS笔试面试题-C语言
- SQL经典面试题
- 71道经典Android面试题和答案 .
- jQuery经典面试题及答案精选[转]
- C 语言经典题目系列解决方案(8)-选择排序
- 五个JS经典面试题
- 免费视频教程分享 :java经典面试题深度解析
- C语言经典案例(4~~6)
- 数据交换的特殊算法--经典面试题
- 经典Java面试题(搞笑)
- 计算机等级考试二级C语言超级经典400道题目(4)