
几个简单的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]被释放了么?
为什么调用的次序是正向的;不是先赋值后析构么? 展开
为什么答案是 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]被释放了么?
为什么调用的次序是正向的;不是先赋值后析构么? 展开
2个回答
展开全部
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下面,再运行,便会清晰一些。
呵呵,讲了这么多,希望能多给点分,嘻嘻,,,
2~是对二进制的位操作,将其数值化为二进值再取反再进行变化吧。注意符号位。
3,同于上,将其转化为二进制后,进行位操作,再转化为十进制的整数。
4,第四题,我也觉得奇怪结果是二
5,指针不指向地址指向什么,指针本来就是指向地址的。只是说不能把你随便定义的址如:1000,直接赋给它。
6,定义的时候并没有定义七位呀,内存有多大就可以写多大。
7,A(++n); 第一次时就调用了,因为作为赋值的了。原因是因为中间变量A〔+n〕,此处调用了缺省构造函数(你这里面的缺省构造函数分明是构造函数)输出2345前析构是:A〔++n〕中的四个,你把printf和构造赋值a〔i〕放在一个for下面,再运行,便会清晰一些。
呵呵,讲了这么多,希望能多给点分,嘻嘻,,,
展开全部
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下面,再运行,便会清晰一些
2~是对二进制的位操作,将其数值化为二进值再取反再进行变化吧。注意符号位。
3,同于上,将其转化为二进制后,进行位操作,再转化为十进制的整数。
4,第四题,我也觉得奇怪结果是二
5,指针不指向地址指向什么,指针本来就是指向地址的。只是说不能把你随便定义的址如:1000,直接赋给它。
6,定义的时候并没有定义七位呀,内存有多大就可以写多大。
7,A(++n); 第一次时就调用了,因为作为赋值的了。原因是因为中间变量A〔+n〕,此处调用了缺省构造函数(你这里面的缺省构造函数分明是构造函数)输出2345前析构是:A〔++n〕中的四个,你把printf和构造赋值a〔i〕放在一个for下面,再运行,便会清晰一些
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询