1.
|
函数外部访问x等于什么?
解:0
枚举类型:在函数外部访问,默认初始化为0。在函数内部访问,必须要初始化,否则编译不通过。
2.在32位机器中,如下代码:
1 2 3 4 5 6 7 8 9 |
|
的输出是?
解:4
数组名作函数参数,会退化为指针。
指针的实质是一个内存空间,内存空间的分配与机器的字长有关。
32位指针大小:4
64位指针大小:8
3.
|
解:6
5
4
4
printf("%d\n"
,sizeof(str));数组str所占的内存空间大小;字符串都是已'\0'结尾,也要算,所以是6。
printf(
"%d\n"
,strlen(str));数组str的长度;大小为5。
printf(
"%d\n"
,sizeof(p));指针大小;32为机器为4,64为机器为8。
Func(str);数组名作函数参数,退化为指针。故还是求指针大小
4.
下面程序运行后的结果为:
1 2 3 4 5 6 7 |
|
32位系统下下面程序的输出结果为多少?
解:result is to test something
char
str[] =
"glad to test something"
;
char
*p = str;//指针p指向str数组的首地址g
p++;//指向str的l
int
*p1 = reinterpret_cast<
int
*>(p);//
指针p被重新解释为整型指针并被赋值给p1
p1++;//p1是int型32位占4个字节,所以指向t
p = reinterpret_cast<
char
*>(p1);//p1重新转换为字符型赋值给p
printf(
"result is %s\n"
, p);
5.
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?
1 2 3 4 5 6 7 8 |
|
解: ABDC
c是全局变量和d局部静态变量,分配在静态全局区,程序结束时释放。全局变量和局部静态变量,先调用,后释放。
pa是堆上的对象指针,手动释放
b是栈上的对象,main结束时释放
6.若char是一字节,int是4字节,指针类型是4字节,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
问:
(1)若按4字节对齐sizeof(CTest)的值是多少?
(2)若按1字节对齐sizeof(CTest)的值是多少?
请选择正确的答案。
解:12 和 9
若按4字节对齐sizeof(CTest)的值是12;
若按1字节对齐sizeof(CTest)的值是9
解释:
在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。
如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间
虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。
sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于int、float这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小
7.在Java中,以下关于方法重载和方法重写描述正确的是?
A.方法重载和方法的重写实现的功能相同
B.方法重载出现在父子关系中,方法重写是在同一类中
C.方法重载的返回值类型必须一致,参数项必须不同
D.方法重写的返回值类型必须相同或相容。(或是其子类)
解:D
方法重载:在一个类里面,定义的同名函数(函数参数类型、参数个数、返回值不一样)
方法重写:在派生类中,重写基类的方法。只有函数体不一样,函数名,函数参数,参数个数都要一样。
8.
|
运行时的输出结果是(122444)
MyClass obj1(1):调用构造函数,输出1
MyClass obj2(2):调用构造函数,输出2
MyClass obj3 = obj1;调用拷贝构造函数,输出2
调用3次,析构3次:444