关于c++ 的几个题目
这几个题目我不懂那些答案是怎么来的,请详细解释下,谢谢!!1、假定一个结构类型定义为“structD{inta;union{intb;doublec;};D*d[2];}...
这几个题目我不懂那些答案是怎么来的,请详细解释下,谢谢!!
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、假定一个结构类型定义为
“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)这里有几个要点:
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] *(p+i)=array[i]
同理对于一个二维数组
**p=array[0][0] *(*(p+i)+j)=a[i][j]
(5)应该选cin
cin.width(int n)的作用是,控制当前cin的输入,表示前n个字符有效。如:
string a;
cin.width(5);
cin >>a;
cout <<a;
输入abcdef,则输出abcd(因为系统会默认加上一个'\0')所以是5个字符。
(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] *(p+i)=array[i]
同理对于一个二维数组
**p=array[0][0] *(*(p+i)+j)=a[i][j]
(5)应该选cin
cin.width(int n)的作用是,控制当前cin的输入,表示前n个字符有效。如:
string a;
cin.width(5);
cin >>a;
cout <<a;
输入abcdef,则输出abcd(因为系统会默认加上一个'\0')所以是5个字符。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询