关于c++ 的几个题目

来源:百度知道 编辑:UC知道 时间:2024/05/08 05:16:15
这几个题目我不懂那些答案是怎么来的,请详细解释下,谢谢!!

1、假定一个结构类型定义为

“struct D { int a ; union { int b ; double c ; } ; D * d[2] ; } ;” ,

则该类型的大小为 20 字节。

2、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为 4

3、假定一个一维数组的定义为“char * a[8] ;”,所占存储空间的字节数为 32 。

4、假定a是一个二维数组,则a[i][j]的指针访问方式为 *(a[i]+j) 或 *(*(a+i)+j)

5,width函数控制输出宽度,含有这个成员函数的是()
A. set b.ios_base c.cout d.cin

我来为楼主一一解答,因为楼主的关系,这些以前我没有注意到的知识细节都被我一一思考并实践过了,嘿嘿,也算互相学习啦哈哈

(1)这里有几个要点:
1、首先结构体所占据的空间数等于各个成员之和,而共用体所占据的空间数等于成员中最大的那个。
2、记住:只要定义了一个指针数组(其成员全部是指针),那么不管这个指针数组是什么类型(int,long,自定义或者外星生物类型-_-...),其每个指针成员固定占据4个字节,这是系统规定的,没有Why
比如你写下:
long * a[8];double *b[8];char *c[8];D *d[8](D是自定义数据类型)
然后用sizeof()来测其长度,全部都为4×8=32,这是一定的!!!!
so that,我们来看你的题目吧——————int占4个字节,union占8个字节,D*占8个字节,所以4+8+8=20字节!!OK!!

(2)首先构造函数在什么时候调用?准确的说是在调用这个类建立对象的时候调用。所以
AB a(4):这是什么呢?是函数的声明还是调用呢?如果是声明 那就不因该有参数4,如果是调用,那就不该有类型AB,所以不知道这一句是干什么的-_-~~~
AB b[3]:这是建立一个数组类对象,有3个元素,每个元素都是一个类,所以调用3次构造函数。
AB *p[2]:这是建立一个指针数组,类型为AB类类型。经我实践,在VC6中,建立一个类类型的指针数组是不会调用构造函数的(前面都说了,其空间大小完全固定,是4个字节,所以还需要构造什么呢?)只有当让这个指针指向一个对象的时候,才会调用构造函数。所以这里我也不清楚
不好意思,第2题确实不懂~~~等别人来解答吧

(3)记住:只要定义了一个指针数组那么每个指针成员固定占据4个字节,所以=4×8=32

(4)鉴于你前面问的都把我难住了,然而这个问题却太不入格啦~~应该多看看书吧。先看对于一个1维数组,用指针指向这样一个数组,
int a[10];int *p=a;这实际上是把数组的首地址给了p
那么很显然的就有:*p=array[0] *(