- 博客(53)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注
原创 每日一题(53)—— 评价代码片段
评价下面代码片段:unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1's complement of zero */ 对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下: unsigned int compzero= ~0; 这一问题
2017-08-23 13:53:30 1603
原创 每日一题(52)—— 进程
列举几种进程的同步机制:1)原子操作2)信号量机制3)自旋锁 4)管程,会合,分布式系统网络编程中设计并发服务器,使用多进程与 多线程 ,请问有什么区别?1) 进程:子进程是父进程的复制,它获得父进程数据空间,堆栈的复制品。2) 线程:相对于进程而言,线程更接近于一个执行体的概念,它可以与同进程的其他线程同享进程资源,但同时拥有自己的栈空间,寄存器,
2017-08-23 13:53:11 757
原创 每日一题(51)—— 大小端判断
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1。int checkCPU(){ { union w { int a; char b; } c; c.a = 1; return (c.b == 1); }}分析:嵌入式系统开发者应该对Little
2017-08-23 13:52:53 856
原创 每日一题(50)—— 各类型与零值的比较
分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)解答: BOOL型变量:if(!var) int型变量: if(var==0) float型变量: const float EPSINON =0.00001; if ((x >= -
2017-08-23 13:52:33 668
原创 每日一题(49)—— 有符号数与无符号数
void foo(void){ unsigned int a = 6; int b = -20; (a + b> 6)?(">6"):("<6");}上面代码输出是什么,为什么?答案是“>6”原因是当操作数中有符号类型和无符号类型进行运算时所有的操作数都自动转换成无符号数。
2017-08-23 13:52:01 822
原创 每日一题(48)—— 中断
中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。__interrupt double compute_area(double radius){ double area = pi*radi
2017-08-23 13:51:39 1025
原创 每日一题(47)—— 置1与清0
嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。置1用|,清0用&#define BIT3 (0x01<<3)static int a;void set_bit3(void){ a|=BIT3;}void clear_bit3(
2017-08-23 13:51:19 1542
原创 每日一题(46)—— volatile
1.一个变量可以既是const 还是volatile吗?解释为什么?可以,例如状态寄存器。它首先应该是volatile 因为它可以出乎意料的修改,而且应该是const,这个寄存器程序不应该去修改。2.一个指针可以说volatile的吗?可以,例如中断服务子程序中修改一个指向buffer的指针。3.下列代码有错误吗?Int square(volatile int *ptr){
2017-08-23 13:50:42 730
原创 每日一题(45)—— 字符数组找错
void test2(){ char str1[10], str2[10]; int i; for(i=0; i<10; i++) str1[i] = 'a'; strcpy( str2, str1 );}这段代码有什么问题?解答:如果面试者指出字符数组str1不能在数组内结束可以给3分;如果
2017-08-23 08:22:40 825
原创 每日一题(44)—— 请列举一个软件中时间换空间或者空间换时间的例子
请列举一个软件中时间换空间或者空间换时间的例子:--->时优void swap(int a,int b){ int c; c=a; a=b; b=c;}--->空优void swap(int a,int b){ a=a+b; b=a-b; a=a-b;}
2017-08-23 08:22:02 2927 1
原创 每日一题(43)—— 数组越界
下面这个程序执行后会有什么错误或者效果:#define MAX 255int main(){ unsigned char A[MAX],i; for (i=0;i<=MAX;i++) { A[i]=i; }}解答:死循环加数组越界访问(C/C++不进行数组越界检查)MAX=2
2017-08-22 08:28:26 583
原创 每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数
已知一个数组table,用一个宏定义,求出数据的元素个数。// 总大小除以第一个元素的大小#define NTBL (sizeof(table)/sizeof(table[0]))
2017-08-22 08:28:08 8041 1
原创 每日一题(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 656
原创 每日一题(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 622
原创 每日一题(38)—— 一个32位的机器,该机器的指针是多少位?
一个32位的机器,该机器的指针是多少位?指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
2017-08-20 16:38:48 3129
原创 每日一题(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 605
原创 每日一题(36)—— 什么是预编译 , 何时需要预编译?
什么是预编译 , 何时需要预编译?1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
2017-08-18 08:31:12 1106
原创 每日一题(35)—— heap与stack的差别
heap与stack的差别:Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在
2017-08-17 08:28:15 691
原创 每日一题(34)—— 线程
1.线程的概念:2 与进程的区别:3 线程与进程的区别和联系? 线程是否具有相同的堆栈?1、线程是指进程内的一个执行单元,也是进程内的可调度实体.2、与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进
2017-08-17 08:27:52 575
原创 每日一题(33)——用两个栈实现一个队列的功能?要求给出算法和思路
用两个栈实现一个队列的功能?要求给出算法和思路。设2个栈为A,B, 一开始均为空.入队:将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈B中最顶元素pop出;如果为空,则将A中所有元素POP出并PUSH到B中,这后POP出最顶元素,A则下移一单位。
2017-08-16 08:33:51 3421
原创 每日一题(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 652 1
原创 每日一题(31)—— 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
2017-08-15 08:35:55 2132 1
原创 每日一题(30)—— 局部变量能否和全局变量重名?
局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2017-08-15 08:35:17 828
原创 每日一题(29)—— 如何引用一个已经定义过的全局变量
如何引用一个已经定义过的全局变量?extern关键字可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
2017-08-14 08:27:52 2826
原创 每日一题(28)—— 引用与指针的区别
引用与指针有什么区别?(1)引用必须被初始化,指针不必;(2)引用初始化以后不能被改变,指针可以;(3)不存在指向空值的引用,但是存在指向空值的指针。NULL。
2017-08-14 08:27:05 523
原创 每日一题(27)—— define定义一个宏表明1年中有多少秒
用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)分析:1、#define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2、懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3、意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整
2017-08-13 11:16:12 3404
原创 每日一题(26)—— 无限循环的几种形式
嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?1、while(1) { } —— 个人推荐使用 2、for(;;) { } —— 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。3、goto Loop: ... goto Loop; —— 应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是
2017-08-13 11:15:06 1219
原创 每日一题(25)—— 自加++
C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?int a = 5, b = 7, c; c = a+++b; 不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:
2017-08-12 09:21:29 446
原创 每日一题(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 487
原创 每日一题(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 684
原创 每日一题(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 432 1
原创 每日一题(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 459 1
原创 每日一题(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 608
原创 每日一题(17)—— 关键字volatile的作用和三个不同的应用场合
关键字volatile的作用和三个不同的应用场合作用:防止编译器优化;(1)并行设备的硬件寄存器(如状态寄存器);// #define S5PV210_GPIO_DATA (*(volatile unsigned char *)0x40000000)(2)中断服务子程序中会访问到的非自动变量;(3)多线程应用中被几个任务共享的变量等等。
2017-08-10 08:37:28 947
原创 每日一题(15)—— static有什么用途
static的用法:(简要回答就好)1、修饰全局变量:只在本文件有效,存储在全局区;2、修饰局部变量:只在本函数有效,存储在全局区;3、修饰函数:只在本文件有效。
2017-08-09 13:01:32 610
原创 每日一题(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 779
c语言学习笔记
2014-08-08
linux文件操作之系统调用
2014-08-08
用c函数实现ls -l功能
2014-08-08
c项目——电子词典
2014-07-09
用讲过的各种C函数实现一个简单的交互式Shell
2014-08-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人