for(int j=0;j
xxx=a[j][i].........
3、关于递归调用的一个题:
int foo(int i)
{
if(i==0)
return 0;
reurn foo(i/2)+1
}
问foo(4)=?
4、一个结构体定义的问题
5、一个编译的问题,关于什么跳转表的(我是EE的,这个题不用作)
6、构造函数都不定义返回类型,对吗?
7、拷贝构造函数在什么情况下被调用?
8、说明带参数的宏和内联函数的区别
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。
内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。
先说宏和函数的区别:
1.
宏做的是简单的字符串替换
(
注意是字符串的替换
,
不是其他类型参数的替换
),
而函数的参数的传递
,
参数是有数据类型的
,
可以是各种各样的类型
.
2.
宏的参数替换是不经计算而直接处理的
,
而函数调用是将实参的值传递给形参
,
既然说是值
,
自然是计算得来的
.
3.
宏在编译之前进行
,
即先用宏体替换宏名
,
然后再编译的
,
而函数显然是编译之后
,
在执行时
,
才调用的
.
因此
,
宏占用的是编译的时间
,
而函数占用的是执行时的时间
.
4.
宏的参数是不占内存空间的
,
因为只是做字符串的替换
,
而函数调用时的参数传递则是具体变量之间的信息传递
,
形参作为函数的局部变量
,
显然是占用内存的
.
5.
函数的调用是需要付出一定的时空开销的
,
因为系统在调用函数时
,
要保留现场
,
然后转入被调用函数去执行
,
调用完
,
再返回主调函数
,
此时再恢复现场
,
这些操作
,
显然在宏中是没有的
.
现在来看内联函数
:
所谓
"
内联函数
"
就是将很简单的函数
"
内嵌
"
到调用他的程序代码中
,
只样做的目的是为了避免上面说到的第
5
点
,
目的旨在节约下原本函数调用时的时空开销
.
但必须注意的是
:
作为内联函数
,
函数体必须十分简单
,
不能含有循环、条件、选择等复杂的结构,否则就不能做为内联函数了。事实上,即便你没有指定函数为内联函数,有的编译系统也会自动将很简单的函数作为内联函数处理;而对于复杂的函数,即便你指定他为内联函数,系统也不会理会的。
CS的题比较琐碎,所以记不了那么多了。希望其它兄弟补充!
struct
A{
int i;
char j;
char * ptr;
long Array[100];
char b[2];
char * c;
};
#define
PRINT_ME (char *)&(((struct A *)0)->c)
void
main()
{
printf("%d/n", PRINT_ME);
}
输出
416
,也就是
c
在结构体
A
中的位移
class
CBase
{
public
:
virtual void foo()
{
cout<<"foo in base"<
}
virtual void bar()
{
cout<<"bar in base"<
}
};
class
CChild : public CBase
{
public
:
virtual void foo()
{
cout<<"foo in child"<
}
virtual void bar()
{
cout<<"bar in child"<
}
};
int
* get(void);
void
main()
{
void (CBase::* pVirtualPointer)(void);
CBase base;
CChild child;
pVirtualPointer = CBase::foo;
(base.*pVirtualPointer)();
(child.*pVirtualPointer)();
pVirtualPointer = CBase::bar;
(base.*pVirtualPointer)();
(child.*pVirtualPointer)();
}
输出:
foo in base
foo in child
bar in base
bar in child
1、 何时调用拷贝构造函数 (根据一个object创建另一个object,clone)
2、构造函数是否有返回类型
3、一个4word(word=4bytes)的cache,问以下程序段cache命中率
(a)for( int i=0; ifor(int j=0; j< N; j++)
sum+= a[i][j];
(b)for( int i=0; ifor(int j=0; j< N; j++)
sum+= a[j][i];
4、以下结构是否正确,why?
u8应该是无符号8位的意思吧
struct{
u8 a;
u16 b;
u8 c;
u8 d;
u16 e;
u8 f;
};
5、一个4×4矩阵,已知每列的和(缺第一列)和每行的和,问第一列的和。
6、用伪汇编代码说明Switch语句的jump table的原理。
7、STDCALL的含义。(sigh,记反了,应该是从右到左调用)
发信人
: OKMatrix (
线性空间
),
信区
: Job
标
题
:
今天
Intel
笔试
——Faint
!!!!
发信站
:
红果园
(2002年11月04日16:30:42
星期一
),
站内信件
今天上午有幸参加
Intel
的
CS
笔试,题目不多,一共
10
道,可是涉
及到很多领域,时间也比较紧张,一共
45
分钟。很多题目还是很复杂的
,现在也记不清了,能回忆多少算多少吧!
题目是英文的,为了方便,我就用中文写了,好像回答也要用英文。
选择题的选项记不清,有的就不写选择项了,自己当作填空吧
交大一共去了
9
个人,那位兄弟补充一下?
Thx
Section I
1.
在
P4
的机器上,下段代码的输出结果是什么:
#include
struct{
int a:3;
int b:2;
int c:3;
}s;
void main(void)
{
char *p;
p=(char*)&s;
*p=0x99;
printf("%d/n",*p);
printf("%d,%d,%d",s.a,s.b,s.c);
}
2.
巨复杂的一道题,已经记不清了,在我了解的范围内还没有人做出来。
3.
在
Linux
操作系统中,假设一个进程
A
对
file1
进行操作,然后一个进程
B
将
file1
改名为
file2
,在改名的同时,
A
进程对
file1
进行写操作,请问
进程
A,B
的执行情况。
4.
判断下面的系统哪个
/
些是软实时的?
四个选择项:
IPVoice
、
MP3Player
、?、?
5.
记不清了,好像有一个什么瓶颈什么的
6.
一个关于多
CPU
的系统问题,给了一大堆条件,最后问单个
CPU
的功耗,
条件太复杂记不清了,不好意思
!
Section II
7.
根据条件,写出
C
编程中的一个常用宏定义(常用于求偏移量)
#include
#define offsizeof(Filed,Struction) ???????????
struct{
int a;
int b;
}s;
void main(void){
void main(void){
....
printf("%d:%d",offsizeof(a,s),offsizeof(b,s));
}
输出结果是:
0
:
4
问完整的宏定义是什么?
8.
用伪代码实现如何监测
Struct
中是否含有循环?(题目
记不清了,大意如此)
9.
在
IP Voice
中,使用
UDP
协议还是是用
TCP
协议?为什么?
Section III
10.
智力测验:一共
9
个硬币,分三行排列,第一行
2
个,第二
行
3
个,第三行
4
个。有两个
Player
进行比赛,每次可以从一行
中取
1~n
个硬币
(2<=n<=4)
,直到取完为止,规则是谁最后一次
取谁输,如果你是第一个
Player
,问:如何取第一次才能保证
你必胜。
并请说明原因。
发信人
: wisher (
幻想家
),
信区
: Career
标
题
:
去年
intel
的题目
发信站
:
未来花园
(2002年11月03日20:13:23
星期天
),
站内信件
听朋友说的。
1
。先是给一个
100
行左右的
c
程序,有
3
句删了,让你补上
2
。计算机的基本组成
3
。一些硬件配置的问题
4
。数据结构的问题。
大体是这样了
关于字符串搜索
:
搜索字符串时常常使用
?
和
%,
例如
"abc?de%f"
的形式
,
其中
?
代表某一个字符
,%
代表任意长度
(>=0)
的一个字符串
,
可以搜索到的字符串可以有以下形式
:"abcydef","abchdeuioyewf"
等形式
,
请实现该算法
.
提示
:
一种可能可行的算法
:
类似与
kmp,
但要修改失败函数
;
其他办法也可
.
要求效率高
.
int MatchPattern( char *String, char *Pattern)
{
if (*Pattern == '/0')
{
cout<<"Find "<
return 1;
}
else if ((*String != '/0') && (*Pattern != '/0'))
{
if ( *Pattern == *String || *Pattern == '?' ) //
相等或者
'?'
{
if (MatchPattern(String+1,Pattern+1))
return 1;
else
return 0;
}
else if (*Pattern == '*') //'*'
{
if (MatchPattern(String,Pattern+1))
{
return 1;
}
else
{
if (MatchPattern(String+1,Pattern))
return 1;
else
return 0;
}
return 0;
}
else //
不相等的情况
{
if (MatchPattern(String+1,Pattern))
return 1;
else
return 0;
}
}
else
{
cout<<"Not Find "<
return 0;
}
}