小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

第三次C/C++专项,嗯,要抗住打击,继续加油~

错题分析与总结

1 . 在64位系统中,有如下类:

class A
{
public:
    void *p1;
private:
    void *p2;
protected:
    void *p3;
};
class B: public A {};

那么sizeof(B)的数值是?

A . 8
B . 16
C . 24
D . 32

分析: 在32位系统中,指针占4个字节,而在64位系统中,指针占8个字节,且都有字节对齐规则;题目中定义类A中有3个指针,故会占用24个字节。B类继承自类A且无成员变量和虚函数表,占用字节和A相同。
需要注意的是,对于类的继承,父类中的私有成员子类不能访问时是编译器的行为,但是其在子类中是存在的,所以同样占用空间,可以通过指针对内存的操作来访问。

答案: C

总结:错选了B , 错误的把指针的占用按照4个字节计算,考虑了8字节对齐,就得到了16字节的错误结果。

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

A . 4
B . 12
C . 28
D . 48

分析: 题目中定义的是int类型的二维数组,int类型变量占用4个字节,每行则占用3 * 4 = 12 字节;而二维数组有4行,故sizeof(B) = 4 * 12 = 48 字节。

答案: D

总结: 错选A,究其原因还是对sizeof操作符功能的了解不透彻,错误的认为其为求首地址的大小。关于sizeof关键字,百科的内容很是详细,sizeof百科内容
3 . 当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少?
A . 1
B . 0
C . 4
D . 运行时错误

分析:举例,class Base {};
运行cout<<”sizeof(Base)=”<

#include <stdio.h>
main( )
{ 
    FILE * fp;
    int i,a[ 6]=﹛1,2,3,4,5,6﹜,k;
    fp = fopen(〝data.dat〞,〝w+〞);
    for (i=0;i<6;i+ +)
    { 
        fseek( fp,0L,0); 
        fprintf(fp,"%d\n",a [ i]); 
        rewind (fp);
        fscanf(fp,〝%d〞,&k);
        fclose(fp);
        printf("%d\n",k);
    }
}

A . 123456
B . 1
C . 6
D . 21

分析: 讨论中的解释是这样的,本题考查文件操作函数,fseek用于二进制方式打开的文件,移动文件读写指针位置。将文件内部的位置指针重新指向一个流(数据流/文件)的开头。所以最后只保留的6。

答案:C

总结: 错选B , 没看懂题目。。。

posted on 2015-06-27 11:50  Coding菌  阅读(218)  评论(0编辑  收藏  举报