几个简单的C++问题

1.已知:charss[][6]={"while","for","else","break"};输出显示"reak"字符串的表达式为什么答案是ss[3]+1数组可以这样表... 1.已知:char ss[][6]={"while","for","else","break"}; 输出显示"reak"字符串的表达式

为什么答案是 ss[3]+1 数组可以这样表示么?

2.为什么cout<<~4<<endl;的值是-5 ?

3. 为什么cout<<(5<<2)+(5>>2)<<endl;的值是21 (5>>2)的值为什么是1不是1.01?

4.#include <iostream.h>
int a=8;
void main()
{
int b=6;
double d=1.5;
d+=a+b;
cout<<(a<0?a:b<0?a++:b++);
}

的值为什么为2, 解释下过程。

5.int a[]={5,4,3,2,1};
int*p=&a[2];

为什么指针可以这样定义,这样不是指向地址了?

6.#include <iostream.h>
int a[]={10,9,6,5,4,2,1};
void main()
{
int n(7),i(7),x(7);
while(x>*(a+i))
{
*(a+i+1)=*(a+i);
i--;
}
*(a+i+1)=x;
for(i=0;i<n;i++)
cout<<*(a+i)<<',';
cout<<a[i]<<endl;

}

为什么可以执行*(a+7) ? 不是数组在初始化的时候已经定义只有7位了么?

7.#include <iostream.h>
class A
{
public:
A(int i)
{a=i;}
A()
{
a=0;
cout<<"调用缺省构造函数."<<a<<endl;
}
~A()
{
cout<<"调用析构函数."<<a<<endl;
}
void print()
{ cout<<a<<endl;}
private:
int a;

};

void main()
{
A a[4],*p;
int n=1;
p=a;
for(int i=0;i<4;i++)
a[i]=A(++n);
for(i=0;i<4;i++)
(p+i)->print();
}

输出结果为:

调用缺省构造函数.0
调用缺省构造函数.0
调用缺省构造函数.0
调用缺省构造函数.0
调用析构函数.2
调用析构函数.3
调用析构函数.4
调用析构函数.5
2
3
4
5
调用析构函数.5
调用析构函数.4
调用析构函数.3
调用析构函数.2

第一次调用析构函数是在什么时候调用的,调用的原因是因为a[4]被释放了么?
为什么调用的次序是正向的;不是先赋值后析构么?
展开
 我来答
小小好宝贝
2009-05-22 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:81.7万
展开全部
1.ss[3]+1,三表示第四个一维数组,二维数组可以看成多个一维数组组成的,如果此处三换为2,效果就是:lse,1表示指针向后移动一个。即指向一维数组中的第二个成员了。
2~是对二进制的位操作,将其数值化为二进值再取反再进行变化吧。注意符号位。
3,同于上,将其转化为二进制后,进行位操作,再转化为十进制的整数。
4,第四题,我也觉得奇怪结果是二
5,指针不指向地址指向什么,指针本来就是指向地址的。只是说不能把你随便定义的址如:1000,直接赋给它。
6,定义的时候并没有定义七位呀,内存有多大就可以写多大。
7,A(++n); 第一次时就调用了,因为作为赋值的了。原因是因为中间变量A〔+n〕,此处调用了缺省构造函数(你这里面的缺省构造函数分明是构造函数)输出2345前析构是:A〔++n〕中的四个,你把printf和构造赋值a〔i〕放在一个for下面,再运行,便会清晰一些。

呵呵,讲了这么多,希望能多给点分,嘻嘻,,,
百度网友07cb6ddc3
2009-05-23 · TA获得超过520个赞
知道答主
回答量:28
采纳率:0%
帮助的人:0
展开全部
1.ss[3]+1,三表示第四个一维数组,二维数组可以看成多个一维数组组成的,如果此处三换为2,效果就是:lse,1表示指针向后移动一个。即指向一维数组中的第二个成员了。
2~是对二进制的位操作,将其数值化为二进值再取反再进行变化吧。注意符号位。
3,同于上,将其转化为二进制后,进行位操作,再转化为十进制的整数。
4,第四题,我也觉得奇怪结果是二
5,指针不指向地址指向什么,指针本来就是指向地址的。只是说不能把你随便定义的址如:1000,直接赋给它。
6,定义的时候并没有定义七位呀,内存有多大就可以写多大。
7,A(++n); 第一次时就调用了,因为作为赋值的了。原因是因为中间变量A〔+n〕,此处调用了缺省构造函数(你这里面的缺省构造函数分明是构造函数)输出2345前析构是:A〔++n〕中的四个,你把printf和构造赋值a〔i〕放在一个for下面,再运行,便会清晰一些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式