编程和简答题
1. static全局便娘与普通全局变量有什么区别?static局部变量和普通局部变量有什么区别?satic函数与普通函数有什么区别?
static全局变量只初使化一次,防止在其他文件单元中被引用(修改链接属性);
static局部变量只被初始化一次,下一次依据上一次结果值(延长生命期);
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
2. 有双向循环链表节点定义为
struct node { int data; struct nod *front, *next; };有两个双向链表A,B,知道其头指针为:pHeadA,pHeadB,请写一个函数将两个链表中的data值相同的节点删除
3. 使用自旋锁时应注意哪些方面
4.字符串倒序程序,类似将"innos"倒序后变为"sonni",请指出下面代码有哪些错误并修正:
#include "string.h" int main(void) { char *pDest, *pSrc; char *src = "neoway"; char *dest = NULL; int length = strlen(src); dest = malloc(length); pDest = dest; pSrc = src[length]; while(length-- != 0) pDest++ = pSrc--; printf("%s", dest); return 0; }
正确程序如下
#include<stdio.h>//要包含这两个头文件 #include<stdlib.h> #include "string.h" int main(void) { char *pDest, *pSrc; char *src = "neoway"; char *dest = NULL; int length = strlen(src); dest = (char *)malloc(length + 1);//多一个空间存储字符串结束符 pDest = dest; pSrc = src + length - 1;//注意下表从0开始src[length]的值为'\0' while(length-- != 0) *pDest++ = *pSrc--;//掉了* *pDest = '\0'; printf("%s", dest); free(dest);//这里要释放一下 return 0; }5. 假如一套代码适应不同项目工程D1,D2,D3,每个项目有自己独立的编译头文件d1.h,d2.h,d3.h,但3个项目共用了同一个c文件file1.c,在file1.c中共用同一个字符串数组char baseband_version[30],该数组用于定义版本号,比如abcd_D1,abcde_D2,abfe_D3分别用于三个项目的版本号,请用代码实现各项目只编译生成对应的baseband_version。
int a,b,c; a = inWord(0x100);/*读取I/O空间0x100端口的内容存入a变量*/ b = a; a = inWord(0x100);/*再次读取I/O空间0x100端口的内容存入a变量*/ c = a;
有隐患,上述代码编译器一般会优化成如下代码
int a,b,c; a = inWord(0x100); b = a; c = a;若避免隐患需要加volatile关键字,这样编译器就不会优化
volatile int a; int b,c; a = inWord(0x100);/*读取I/O空间0x100端口的内容存入a变量*/ b = a; a = inWord(0x100);/*再次读取I/O空间0x100端口的内容存入a变量*/ c = a;