1.设有如下定义:
struck sk
{
int a;
float b;
} data;
int *p;
若要使p指向data中的a域,正确的赋值语句是()。
A.p=&a;
B.p=data.a;
C.p=&data.a;
D.*p=data.a;
正确答案: C 你的答案: D (错误)
要使p指向data中的a成员,则只需将data中成员a的地址,即&data.a赋值给指针变量p即可。故正确答案是C。答案A中没有指明结构体变量,直接对成员引用是非法的;答案B中不能将data的成员a的值(整型数)赋给一指针变量;而答案D中,只是将data的成员a的值赋值给指针p所指向的内存单元,不符合题目的要求。
2.有如下类模板定义:()
template<class T> class BigNumber{
long n;
public:
BigNumber(T i):n(i){}
BigNumber operator+(BigNumber b)
{
return BigNumber(n+b.n);
}
};
已知b1,b2是BigNumber的两个对象,则下列表达式中错误的是?
A.3+3
B.b1+3
C.b1+b2
D.3+b1
正确答案: D 你的答案: A (错误)
因为+运算符被定义为为成员函数,也就是说要想调用该成员函数,+左侧的运算对象必须是本类的类型。
3+3;调用内置类型的+运算符,和本题重载+运算符无关;
b1+3;等价于b1.operator+(3);成立
b1+b2;等价于b1.operator+(b2);成立
3+b1;等价于3.operator+(b1);显然3是一种内置类型,根本没有成员函数;
3.在VC6.0中,运行下面程序的输出结果是( )
#include <stdio.h>
#include <stdlib.h>
void MallocMem(char* pc)
{
pc = (char*) malloc (100);
return;
}
int main()
{
char *str=NULL;
MallocMem(str);
strcpy(str,"hello ");
strcat(str+2, "world");
printf("%s",str);
return 0;
}
A.hello world
B.程序编译错误
C.程序运行时崩溃
D.其他几项都不对
正确答案: C 你的答案: A (错误)
只有形参是要传入的实参的指针和引用才能修改传入实参的值,该处pc只是复制了str。str还是指向NULL,并未给str分配空间,所以执行时会出现段错误。
4.以下哪些API无法实现进程间数据的相互传递
A.SendMessage
B.PostMessage
C.CreateFileMapping
D.CreatePipe
正确答案: B 你的答案: C (错误)