您的位置:首页 > 其它

DAY 2

2015-09-04 15:49 239 查看
day2:

以下代码中的两个sizeof用法有问题吗?

void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母

{

for ( size_t i = 0; i < sizeof(str) / sizeof(str[0]); ++i )

if ( ‘a’ <= str && str <= ‘z’ )

str -= (‘a’ - ‘A’ );

}

char str[] = “aBcDe”;

cout < < “str字符长度为: ” < < sizeof(str) / sizeof(str[0]) < < endl;

UpperCase( str );

cout < < str < < endl;

正解:函数内的有问题

解释:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,因为还有’\0’,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

class A

{

int i;

union U

{

char buff[13];

int i;

}u;

void foo() { }

typedef char* (f)(void);

enum{red, green, blue} color;

}a;

sizeof(a)的值是()

正解:24

解释:联合表示若干数据成员取其一,故以叠加方式分配内存,所占字节数为最大数据成员所占的字节数。 还要字节对齐

空函数 不占字节

所以

4+16+0+0+4

下列运算符,在C++语言中不能重载的是()

正解:.* ::

解释:并不是所有的操作符都能被重载。除了 . , .* , :: , ? : , sizeof , typeid 这几个运算符不能被重载,其他运算符都能被重载。

关于操作系统heap与stack说法中,正确的是()。

heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露

stack由系统自动分配,无需程序员干涉,heap需要手动申请

在int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中,sizeof(b) = ?

b为四行三列 然后就是4*3*4=48

某32位系统下, C++程序如下所示,sizeof 的值应为?

char str[] = “http://www.renren.com” (长度为21)

char *p = str ;

请计算

sizeof (str ) = ?(1)

sizeof ( p ) = ?(2)

void Foo ( char str[100]){

sizeof( str ) = ?(3)

}

void *p = malloc( 100 );

sizeof ( p ) = ?(4)

正解:22, 4, 4, 4

解释:作为函数参数的数组名退化为指针

有一个类B继承自类A,他们数据成员如下:

class A {



private:

int a;

};

class B : public A {



private:

int a;

public:

const int b;

A &c;

static const char* d;

B* e;

}

则构造函数中,成员变量一定要通过初始化列表来初始化的是__。

正解:b c

解释:引用,const成员变量,基类构造函数 一定要通过初始化列表来实现。 static类型不是类成员,不需要通过初始化列表来初始化

What is output if you compile and execute the following code?

void main()

{

int i = 11;

int const *p = &i;

p++;

printf(“ % d”, *p);

}

正解:Garbage value

解释:int const *p = & i;p指向的对象是i,不能够改变p的指向对象,可以修改i的值,p ++,改变了p的指向对象,因此,无法确认*p的值

用户双击鼠标时产生的消息序列,下面正确的是()

正解:WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK,WM_LBUTTONUP

解释:双击即点击左键两下,第一次触发LBUTTONDOWN和LBUTTONUP,第二次点击时触发双击事件LBUTTONDBLCLK(doubleclick),放掉再触发LBUTTONUP

父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类对象指针会调用父类的析构函数

以下哪个函数可以在源地址和目的地址的位置任意的情况下,在源地址和目的地址的空间大小任意的情况下实现二进制代码块的复制?

memmove()

多态性_意味着一个操作在不同的类中可以有不同的实现方式。

抽象类不能实例化,抽象类不能参数类型 和 函数返回类型

一个双目运算符作为类的成员函数重载时,重载函数的参数表中有()个参数。

正解:1

解释:重载为类成员函数时,类本身是该双目运算符的一个参数,所以还需要一个参数

如果重载为友元函数则需要两个参数

一张1024×640分辨率的图片,假定每个像素用16位色彩表示,用位图文件(bitmap)格式存储,则这张图片文件需要占用多大的存储空间__。

正解:1280kb

解释:1024*640*16 bit = 1024*640*16/8 B = 1024*640*16/8/1024 KB = 1280KB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: