1、A)为什么在c++中引用经c编译器编译的函数要加extern C?
为了解决名称匹配的问题。
B)、c和c++中的struct有什么不同?c++中的struct和class有什么区别?
C中的
struct不允许有成员函数(不知道还有没有其他不同?)
默认情况下,
C++中的struct的成员为public,而class的成员为private,其余完全相同。
2、在两块内存拷贝时应注意什么问题及解决方法?
检查边界(?)
3、化简if(((a|b)||(c&b)||(c&a))&&(a^b))
答:
if(a^b)
4、下面两段汇编程序要实现什么?那段比较好?
a)
mov ebx, 0
mov edx, 0
LOOP:
bt eax, edx
;将eax的第edx位送到ZF
jz NEXT
;该位为0,跳转到NEXT
inc ebx
;该位为1,ebx计数加一
NEXT:
inc edx
;edx加一,取下一位
cmp edx, 20h
;检查edx是否超过32
jnz LOOP
b)
xor ebx, ebx
;ebx置0
LOOP:
add eax, eax
;eax自加,相当于左移1位,放入CF
adc ebx, 0
;ebx=ebx+0+CF
test eax, eax
;检查eax是否为0
jnz LOOP
答:统计
eax中1的位数。
5、一个数组下标的问题,很简单
6、下面程序的运行结果是什么?
void fn(char* a)
{
char var[8];
strcpy(var, a);
}
void main()
{
char a[16] = “hi, S3 Graphics”;
fn(a);
printf(“%s”,a);
}
答:程序崩溃。这是由于
var溢出,覆盖了一些重要的栈信息。如下图:
7、union test {
char a;
struct {
char b:4;
char c:2;
};
};
如果test t={(char)0x55};请写出t.a,t.b和t.c的值?
答:共用体中的不同成员都在低端对齐,结构如下图:
因此值分别为
0x55, 5, 1。
8、求x的值。
int func(int person)
{
int temp = person + 1;
int (*pf)(int) = func;
char c='/2'; // c的值为2
while(temp%2)
temp = 1 + (*pf)(temp);
return (temp+1);
}
void main()
{
int x = func(func(0));
}
答: x为7。
9、写一段求1000以内质数的程序。