深圳有方科技笔试题(c语言)

编程和简答题

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。
6. 下面一段代码的作用是从I/O空间.x100端口的内容读取2次值,inWord为读取函数,这段代码是否有隐患,如果有如何修改?
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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章