面试宝典——每日一题
主要是收录一些常用的面试题,从技术的角度解答和分析面试题的知识点。
a1314521531
这个作者很懒,什么都没留下…
展开
-
每日一题(1) —— 数组计算
#include int main(void){ int array[10] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 0[array] = 1; printf("%d\n", (-1)[array + 5]); return 0;}原创 2017-08-02 18:06:50 · 1219 阅读 · 4 评论 -
每日一题(2)—— -2与2的比较
分析下面的代码,求运行结果。#include int main(void){ if(-2 > 2) { printf("11111\r\n"); } else { printf("22222\r\n"); } return 0;}分析:-2和2都没有声明存储类型,编译器默认按int存原创 2017-08-03 08:50:51 · 692 阅读 · 2 评论 -
每日一题(3)—— -2与2的比较(二)
分析下面的代码,求运行结果。#include int main(void){ if(-2L > 2UL) { printf("11111\r\n"); } else { printf("22222\r\n"); } return 0;}分析:常量后面接L表示long型存储,原创 2017-08-03 08:51:23 · 750 阅读 · 0 评论 -
每日一题(4)—— (a ^ b << 2)
分析下面的代码,求运算结果。#include int main(void){ int a = 6, b = 4; printf("%d\n", a ^ b << 2); return 0;}分析:主要是考的是“优先级”和按位“异或”,左移运算符优先级高于按位异或运算符,所以b先左移两位 = 16,异或运算符是按位操作,对应位原创 2017-08-03 14:43:59 · 663 阅读 · 0 评论 -
每日一题(5) —— 逗号表达式
分析下面的代码,求运算结果。#include int main(void){ int a[3][2] = {(0, 1), (2, 3), (4, 5)}; int *p = a[0]; printf("%d\n", p[0]); return 0;}分析:仔细观察可以看出,大括号里面的是(),而不是花括号,因此判断这是一个逗原创 2017-08-04 08:43:49 · 1208 阅读 · 0 评论 -
每日一题(6)—— sizeof用法
已知int a,一下那种写法是错误的?A. sizeof(int);B. sizeof(a);C. sizeof int;D. sizeof a;以下答案是来自《C语言深度剖析》:原创 2017-08-05 22:12:20 · 656 阅读 · 0 评论 -
每日一题(7) —— 求余运算符
设有以下语句:int x=10;x+=3+x%(-3),则x的值是:A.11B.12C.14D.15分析:求余运算,除数和被除数都可以是负的,求余后的值 与 被除数 的符号相同,比如 -10 % -3 = -1, 10 % -3 = 1。原创 2017-08-06 11:12:36 · 982 阅读 · 2 评论 -
每日一练(8)—— 野指针
int *p;int a = 20;*p = a;printf("%d",*p);运行结果是什么?A.10B.a 的 地址值C.编译错误D.运行异常分析:一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。原创 2017-08-06 13:18:12 · 658 阅读 · 1 评论 -
每日一题(9)—— 写一个标准宏MIN,这个宏输入两个参数并返回较小的一个
写一个标准宏MIN,这个宏输入两个参数并返回较小的一个。分析:宏定义的注意两点:1、数据类型是否有溢出的风险(如一年有多少个秒的宏);2、带参宏的每个参数都要用括号括起来。#define MIN(x,y) ((x) 如果x,y不加原创 2017-08-07 09:28:18 · 12457 阅读 · 8 评论 -
每日一题(10)—— 数组与指针
分析下面的代码,求输出结果。 int a[5] = {1,2,3,4,5}; int *p = (int *)(&a + 1); printf("%d %d",*(a + 1),*(ptr - 1)); 分析:&a —— 数组原创 2017-08-07 13:24:50 · 652 阅读 · 0 评论 -
每日一题(11)—— 结构体大小
分析下面的代码,求运行结果。#include struct{ int id; unsigned char arg; char *p; void (*func)(void);} test;int main(void){ printf("sizeof(test.id):%d\n", sizeof(test.id)); print原创 2017-08-08 08:34:04 · 597 阅读 · 1 评论 -
每日一题(12)—— .h头文件中ifndef/define/endif的作用
.h头文件中ifndef/define/endif的作用?分析:防止头文件被重复包含。#ifndef _TEST_H_#define _TEST_H_/* test.h */#endif /* _TEST_H_ */假如在a文件和b文件中都使用这个test.h,假如编译器先编译a,执行.h的内容,_TEST_H_第一次没有定义,然后#d原创 2017-08-08 08:34:30 · 971 阅读 · 0 评论 -
每日一题(13)—— #include<file.h> 与 #include “file”的区别
#include 与 #include “file”的区别?原创 2017-08-08 21:52:16 · 1875 阅读 · 0 评论 -
每日一题(14)—— 交换a,b的值(不使用中间变量)
如何将a,b的值进行交换,并且不使用任何中间变量?推荐答案:a = a ^ b;b = a ^ b;a = a ^ b;分析:下面的答案不好,可能会导致越界的问题a = a + b; // 可能越界b = a - b;a = a - b;原创 2017-08-09 09:14:28 · 775 阅读 · 0 评论 -
每日一题(15)—— static有什么用途
static的用法:(简要回答就好)1、修饰全局变量:只在本文件有效,存储在全局区;2、修饰局部变量:只在本函数有效,存储在全局区;3、修饰函数:只在本文件有效。原创 2017-08-09 13:01:32 · 607 阅读 · 0 评论 -
每日一题(16)—— 声明和定义的区别
简述变量/函数声明和定义的区别:原创 2017-08-10 08:36:34 · 638 阅读 · 0 评论 -
每日一题(17)—— 关键字volatile的作用和三个不同的应用场合
关键字volatile的作用和三个不同的应用场合作用:防止编译器优化;(1)并行设备的硬件寄存器(如状态寄存器);// #define S5PV210_GPIO_DATA (*(volatile unsigned char *)0x40000000)(2)中断服务子程序中会访问到的非自动变量;(3)多线程应用中被几个任务共享的变量等等。原创 2017-08-10 08:37:28 · 943 阅读 · 0 评论 -
每日一题(18)—— 指定地址存入数据
往内存地址0x1c1b上存入一个数据0x10,使用指针如何操作,写出代码。原创 2017-08-10 10:59:23 · 706 阅读 · 0 评论 -
每日一题(19)—— 用变量a给出下面的定义
变量的定义原创 2017-08-10 10:59:54 · 6012 阅读 · 2 评论 -
每日一题(20)——malloc与free(一)
void GetMemory( char *p ){ p = ( char * )malloc( 100 );} void Test( void ){ char *str = NULL; GetMemory( str ); strcpy( str, “hello world” ); printf( str );}1、指出编程错误2、指出原创 2017-08-11 08:37:39 · 603 阅读 · 0 评论 -
每日一题(21)——malloc与free(二)
char *GetMemory( void ){ char p[] = “hello world”; return p;} void Test( void ){ char *str = NULL; str = GetMemory(); printf( str );}1、指出编程错误2、指出错误后果3、指出纠正方法原创 2017-08-11 08:38:04 · 457 阅读 · 1 评论 -
每日一题(22)——malloc与free(三)
void GetMemory( char **p, int num ){ *p = ( char * )malloc( num );} void Test( void ){ char *str = NULL; GetMemory( &str, 100 ); strcpy( str, “hello world” ); printf( str );}原创 2017-08-11 08:38:22 · 430 阅读 · 1 评论 -
每日一题(23)——malloc与free(四)
void Test(void){ char *str = (char *)malloc(100); strcpy(str, "hello"); free(str); if(str != NULL) { strcpy(str, "world"); printf(str); }}1、指出编程错误2、指出错误后果3、指出纠正原创 2017-08-11 08:38:54 · 683 阅读 · 0 评论 -
每日一题(24)—— const
关键字const的作用:1、const int a;2、int const a;3、const int *a;4、int * const a;5、const int const * a;原创 2017-08-12 09:20:28 · 486 阅读 · 0 评论 -
每日一题(25)—— 自加++
C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?int a = 5, b = 7, c; c = a+++b; 不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:原创 2017-08-12 09:21:29 · 444 阅读 · 0 评论 -
每日一题(26)—— 无限循环的几种形式
嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?1、while(1) { } —— 个人推荐使用 2、for(;;) { } —— 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。3、goto Loop: ... goto Loop; —— 应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是原创 2017-08-13 11:15:06 · 1215 阅读 · 0 评论 -
每日一题(27)—— define定义一个宏表明1年中有多少秒
用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)分析:1、#define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2、懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3、意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整原创 2017-08-13 11:16:12 · 3398 阅读 · 0 评论 -
每日一题(28)—— 引用与指针的区别
引用与指针有什么区别?(1)引用必须被初始化,指针不必;(2)引用初始化以后不能被改变,指针可以;(3)不存在指向空值的引用,但是存在指向空值的指针。NULL。原创 2017-08-14 08:27:05 · 521 阅读 · 0 评论 -
每日一题(29)—— 如何引用一个已经定义过的全局变量
如何引用一个已经定义过的全局变量?extern关键字可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。原创 2017-08-14 08:27:52 · 2818 阅读 · 0 评论 -
每日一题(30)—— 局部变量能否和全局变量重名?
局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。原创 2017-08-15 08:35:17 · 821 阅读 · 0 评论 -
每日一题(31)—— 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。原创 2017-08-15 08:35:55 · 2121 阅读 · 1 评论 -
每日一题(32)—— 联合体大小
设有以下说明和定义:typedef union{ long i; int k[5]; char c;} DATE;struct data{ int cat; DATE cow; double dog;} too;DATE max;则语句 printf("%d",sizeof(structdate)+sizeof(max));的执行结果是:原创 2017-08-16 08:33:02 · 646 阅读 · 1 评论 -
每日一题(33)——用两个栈实现一个队列的功能?要求给出算法和思路
用两个栈实现一个队列的功能?要求给出算法和思路。设2个栈为A,B, 一开始均为空.入队:将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈B中最顶元素pop出;如果为空,则将A中所有元素POP出并PUSH到B中,这后POP出最顶元素,A则下移一单位。原创 2017-08-16 08:33:51 · 3419 阅读 · 0 评论 -
每日一题(34)—— 线程
1.线程的概念:2 与进程的区别:3 线程与进程的区别和联系? 线程是否具有相同的堆栈?1、线程是指进程内的一个执行单元,也是进程内的可调度实体.2、与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进原创 2017-08-17 08:27:52 · 568 阅读 · 0 评论 -
每日一题(35)—— heap与stack的差别
heap与stack的差别:Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在原创 2017-08-17 08:28:15 · 685 阅读 · 0 评论 -
每日一题(36)—— 什么是预编译 , 何时需要预编译?
什么是预编译 , 何时需要预编译?1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。原创 2017-08-18 08:31:12 · 1103 阅读 · 0 评论 -
每日一题(37)—— 常量存储区
char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout <<原创 2017-08-18 08:31:55 · 600 阅读 · 0 评论 -
每日一题(38)—— 一个32位的机器,该机器的指针是多少位?
一个32位的机器,该机器的指针是多少位?指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。原创 2017-08-20 16:38:48 · 3120 阅读 · 0 评论 -
每日一题(39)—— sizeof
以下代码中的两个sizeof用法有问题吗?void UpperCase(char str[]){ for(size_t i = 0; i < sizeof(str); ++i) { str[i] -= ('a' - 'A'); }}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str原创 2017-08-20 16:39:11 · 618 阅读 · 0 评论 -
每日一题(40)—— 字符串常量
下列代码有什么问题?char* s="AAA";printf("%s",s);s[0]='B';printf("%s",s);"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosntchar* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。原创 2017-08-21 09:06:27 · 655 阅读 · 0 评论