C/C++基础易错题整理4

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 (错误)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值