请教几道C和C++的题目!(是C和C++牛人的进来回答问题!)
很多道题目不知道为什么,期盼牛人解答!
以下三条输出语句分别输出什么?[C易]
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?
cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?
cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?
2. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]
答:
a. class B : public A { ……} // B公有继承自A,可以是间接继承的
b. class B { operator A( ); } // B实现了隐式转化为A的转化
c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数
d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
3. 以下代码中的两个sizeof用法有问题吗?[C易]
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
}
char str[] = "aBcDe";
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
4. 以下代码有什么问题?[C难]
void char2Hex( char c ) // 将字符以16进制表示
{
char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
cout << ch << cl << ' ';
}
char str[] = "I love 中国";
for( size_t i=0; i<strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
5. 以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
6. 以下代码有什么问题?[C++易]
cout << (true?1:"1") << endl;
7. 以下代码能够编译通过吗,为什么?[C++易]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
8. 以下代码中的输出语句输出0吗,为什么?[C++易]
struct CLS
{
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
};
CLS obj;
cout << obj.m_i << endl;
9. C++中的空类,默认产生哪些类成员函数?[C++易]
答:
class Empty
{
public:
Empty(); // 缺省构造函数
Empty( const Empty& ); // 拷贝构造函数
~Empty(); // 析构函数
Empty& operator=( const Empty& ); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const; // 取址运算符 const
};
10. 以下两条输出语句分别输出什么?[C++难]
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
11. 以下反向遍历array数组的方法有什么错误?[STL易]
vector array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组
{
cout << array[i] << endl;
}
12. 以下代码有什么问题?[STL易]
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 删除array数组中所有的2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
if( 2 == *itor ) array.erase( itor );
}
13. 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
答:
void* mymemcpy( void *dest, const void *src, size_t count )
{
char* pdest = static_cast<char*>( dest );
const char* psrc = static_cast<const char*>( src );
if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了
{
for( size_t i=count-1; i!=-1; --i )
pdest[i] = psrc[i];
}
else
{
for( size_t i=0; i<count; ++i )
pdest[i] = psrc[i];
}
return dest;
}
int main( void )
{
char str[] = "0123456789";
mymemcpy( str+1, str+0, 9 );
cout << str << endl;
system( "Pause" );
return 0;
}
问题点数:0、回复次数:119Top
1 楼lao_du(阿东 aDong)回复于 2005-04-22 12:27:50 得分 0
我试试第一题:
//这些题都有很大的学问,全回答需要很大的篇章,有不对的地方,请各位高手指出,我一定虚心学习.
字符串有3种:char数组,字符串常量, char指针.
char数组名是字符串首字母的地址;字符串常量的行为与数组名相同;char指针指向字符串常量的地址.
char str1[] = "abc"; //声明一个char数组,编译器分配一块内存给它,大小根据后面给出的字符串自动分配; str1为 char数组 表示字符串首字母地址,即字符串地址; sizeof 返回数组大小.
char str2[] = "abc"; //同上
const char str3[] = "abc"; //同上,只是str3被声明为只读,不能被修改.
const char str4[] = "abc"; //同上
const char* str5 = "abc"; //声明一char指针,指向字符串常量;且char指针只读,不能被修改; str5为一指向 存放字符串常量"abc"地址的 指针; sizeof 返回 指针大小 4B.
const char* str6 = "abc"; //同上
cout << boolalpha << ( str1==str2 ) << endl; // 输出false 因为采用声明,分配2块不同的内存,所以地址不同
cout << boolalpha << ( str3==str4 ) << endl; // 输出false 同上
cout << boolalpha << ( str5==str6 ) << endl; // 输出true 地址可能相同,但C++不能保证字符串常量被唯一地址存储(可能有几个副本)
Top
2 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-04-22 12:31:46 得分 0
markTop
3 楼ljan(冰魂)回复于 2005-04-22 12:48:47 得分 0
好多问题,看看Top
4 楼minanqiang(我是天上的飞鸟)回复于 2005-04-22 12:50:46 得分 0
其中有几道题目我知道答案,下周一公布!到时散分!Top
5 楼Cuiql(向前冲,向后看)回复于 2005-04-22 12:59:41 得分 0
第二题: 我见过a,c的转化.没有用过,b,d
第三题:有问题.
第五题:有问题Top
6 楼vcleaner(我没当大哥很久了.......)回复于 2005-04-22 13:02:18 得分 0
Mark,学习!Top
7 楼lao_du(阿东 aDong)回复于 2005-04-22 13:03:09 得分 0
3. 以下代码中的两个sizeof用法有问题吗?[C易] 答:当然有问题!
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
for( size_t i=0; i ^ sizeof(str)/sizeof(str[0]); ++i )
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
////----在函数内 sizeof(str) 返回指针的大小,在此一直为4, 非本意的 字符串数组大小.
}
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
////----在函数外: sizeof(str) 返回字符串数组的大小,
UpperCase( str );
附: 函数传递字符串,不是传递拷贝副本(其它类型都是传递副本,除指针外),即:传递的是字符串内存地址,所以可以根据传进的地址修改原字符串; 如不想对传进的字符串做修改操作,该用 const 修饰.
//下午还有事,晚上回来看继续关注!Top
8 楼lorylxw()回复于 2005-04-22 13:17:19 得分 0
9.我试了默认只能产生默认构造函数和析构函数的,这个应该可以肯定的吧,既然是空类,那应该什么也不做,取地址运算,拷贝复制构造和赋值运算这些用不上吧Top
9 楼jordan1(班君)回复于 2005-04-22 13:27:26 得分 0
标记Top
10 楼lorylxw()回复于 2005-04-22 13:29:42 得分 0
8.这道题目不能输出0,在C++不允许在构造函数中调用其他构造函数,JAVA中可以在构造函数中能直接调用其他构造函数。解释不是很全面,不过应该是这个意思了吧。不对请指出Top
11 楼yyying(英洁)回复于 2005-04-22 14:24:46 得分 0
以下两条输出语句分别输出什么?
请各位高手多多指点!!!
float a = 1.0f;
cout << (int)a << endl; //强制转换为整形;
cout << (int&)a << endl; //同上并取地址;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl; //同上;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
回答:
1
1065353216
false
0
0
true
Top
12 楼akirya(坏[其实偶不是什么所谓的坏人])回复于 2005-04-22 15:14:10 得分 0
想想不行
最好拿编译器去编译一下才行Top
13 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-04-22 15:39:52 得分 0
up下,分点分Top
14 楼didoo(小狗的欲望)回复于 2005-04-22 17:46:57 得分 0
传说中,up可以分分,真的吗?Top
15 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2005-04-22 18:03:21 得分 0
我的分都是up来得Top
16 楼rockhard(不签名)回复于 2005-04-22 18:26:07 得分 0
4.“中国”两字为汉字,共四个字节,每个字节大于0x80。所以当char 处理时为负数。计算会不正确。Top
17 楼ect2(利爪)回复于 2005-04-22 18:33:46 得分 0
问题看着简单,想着很难,顶一下再说Top
18 楼aerfa(aerfa)回复于 2005-04-22 19:06:50 得分 0
markTop
19 楼xfxf521(天使也一样)回复于 2005-04-22 19:48:39 得分 0
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
回答:
1
1065353216
false
0
0
true
倒数第二答案为什么是0,有点想不通。
Top
20 楼zdy_8212(zdy_8212)回复于 2005-04-22 20:41:45 得分 0
1.判断相等与否,他们比较的都是地址.因此F.T.T
2.dynamic_cast?答案-
3.sizeof()
没时间看了..有空说..呵.Top
21 楼diandian82(点点(nothing))回复于 2005-04-22 20:48:06 得分 0
cout<<(unsigned int)str5<<endl;
cout<<(unsigned int)str6<<endl;
显示的地址真的一样,这是为什么呀?谁能解释一下!Top
22 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2005-04-22 21:38:48 得分 0
upTop
23 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-04-22 21:57:57 得分 0
1.指针指向的是同一块内存区
即&str5和str6不同,但是str5 和str6相同,都是"abc"的首地址。
3.做为参数传递的是char*,所以sizeof(char[]) 为sizeof(char*)==4(32位)。
4.汉字为双字节吧,用wchar_t,当然算法也得变吧。
5.调用无参构造函数应该为 test b;(好像论坛有过关于这个的争论?我用的编译器(vc6)好像是这样调用的)
6.cout << (true?1:"1") << endl;
?后应该是基本类型吧?
7. 对const和 char[]初始化时必须用常量(const修饰的是不是也算常量)
8.不太清楚。设个断点没进去。
10.不知道。
11.vector::size_type 为size_t即为unsigned int型,i为零 --i后为2的32次方 -1
12.erase只删除了第一个为3的值
可以用
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
array.erase( attr );
}
Top
24 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-04-22 22:00:04 得分 0
12.可以用
array.erase(remove(array.begin(),array.end(),3),array.end)
Top
25 楼zhangfjj(小张)回复于 2005-04-22 22:07:34 得分 0
占个座先Top
26 楼xiabao(小军)回复于 2005-04-22 22:09:42 得分 0
用VC调试一下 就出来了哦Top
27 楼titainium(一千瓦的刀狼)回复于 2005-04-22 22:23:42 得分 0
12题不对,iter会报错,因为会指向一个删除的元素。Top
28 楼flyarry()回复于 2005-04-22 22:43:34 得分 0
记下Top
29 楼t_jl1979(骑士)回复于 2005-04-22 22:44:18 得分 0
这些题都是有来头的题. 这是exceptional c++上面的题,专门有一节讲这个.不简单的.
以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
Top
30 楼MagicCarmack(MagiC++)回复于 2005-04-23 10:52:14 得分 0
相同的字符串的首地址是否相同,与编译器实现有关的Top
31 楼mostideal(三甲)回复于 2005-04-23 11:07:35 得分 0
这些题都是有来头的题. 这是exceptional c++上面的题,专门有一节讲这个.不简单的.
以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
————————————————————————————————————
结构能这样做吗???Top
32 楼HovahYuan(格瓦拉)回复于 2005-04-23 11:30:14 得分 0
markTop
33 楼qnjian(南一郎 )回复于 2005-04-23 12:05:38 得分 0
up
Top
34 楼mba9001(两年不见,csdn变肥了)回复于 2005-04-23 13:09:53 得分 0
markTop
35 楼aceouter(outer)回复于 2005-04-23 13:20:08 得分 0
markTop
36 楼asddfg(美和智慧一样,只喜欢孤寂的崇拜者 )回复于 2005-04-23 13:21:42 得分 0
好多题,, Mark,学习!Top
37 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-23 13:33:34 得分 0
结构中一般不定义成员函数吧,类才可以这样Top
38 楼yuanyou(元友)回复于 2005-04-23 14:18:29 得分 0
heheTop
39 楼yythinking()回复于 2005-04-23 14:38:21 得分 0
cout << (true?1:"1") << endl;
好像:前后要求类型相同吧
cout << (true?"1":"1") << endl;和cout << (true?1:1) << endl;都可以
Top
40 楼yab1109(*星空下的吻*)回复于 2005-04-23 15:17:46 得分 0
HOHO很难饿,还没学起来Top
41 楼xxgu(上柳梢)回复于 2005-04-23 16:07:31 得分 0
标一下来Top
42 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-04-23 18:09:50 得分 0
结构中一般不定义成员函数吧,类才可以这样
c++中struct是和类差不多的
除了c++默认为private,而struct为public的Top
43 楼rabi_(`!懒虫!`)回复于 2005-04-23 18:15:50 得分 0
好多,学习一下Top
44 楼shiwen2005(南昌的)回复于 2005-04-23 22:32:02 得分 0
太多了噢Top
45 楼jordan1(班君)回复于 2005-04-24 10:41:43 得分 0
i<strlen(str);
上面的语句是什么意思啊,请达人告知。谢谢!Top
46 楼minanqiang(我是天上的飞鸟)回复于 2005-04-25 09:31:53 得分 0
UPTop
47 楼andycpp(幻瞳)回复于 2005-04-25 09:55:52 得分 0
markTop
48 楼saince(搜猫)回复于 2005-04-25 10:40:17 得分 0
先占,回去慢慢看。Top
49 楼whyglinux(山青水秀)回复于 2005-04-25 15:56:10 得分 0
1、
str1、str2、str3、str4都是数组名,在数值上表示数组的起始地址。不同数组的首地址是不一样的,所以 str1==str2 以及 str3==str4 的结果都是 false。
const char* str5 = "abc";
const char* str6 = "abc";
这种情况比较特殊。str5、str6是字符指针,存放的是常量字符"abc"的起始地址。对于相同的常量字符串,现在的编译器一般都只存放它的一个拷贝,所以这时 str5==str6 为 true。但是并不是所有的编译器都会这样做,所以 str5==str6 的结果是实现相关的。
2、
3、
void UpperCase( char str[] ) 中的 str 在函数内将“退化”为一个普通的字符指针 char*,所以在函数内 sizeof(str) = sizeof(char*),因此用它不能求出数组的大小;一般情况下函数还需要一个另外的参数来传递数组的大小,如:void UpperCase( char str[], int size )。
字符串的长度(strlen(str))不等于存储字符串的数组的大小(sizeof(str)/sizeof(str[0]));正常情况下,数组的元素个数应该大于字符串的长度。
4、
void char2Hex( char c ) 函数声明应该修改为 void char2Hex( unsigned char c )。这是因为 char 到底是 unsigned char 还是 signed char 在不同的系统上有不同的规定,也就是说是系统相关的。但是上述函数在进行字符转换的时候采用的算法要求字符必须是 unsigned char 型的,否则对于大于127的字符(如中文字符)得不到正确的结果。
5、
Test b(); // 这一句是一个函数声明,声明了一个函数b,返回值类型为Test,参数为空
b.fun(); // b不是Test对象,所以非法
6、
cout << (true?1:"1") << endl; // 1是int型,"1"是字符指针,即 char*。这两种类型不能进行默认转换,所以非法。?:运算符要求后两个操作数的类型必须是兼容的。
7、
不能通过编译。因为 char str2[ size2 ]; 中的 size2 在编译期间其值不能被确定,只有在程序运行期间才能确定。C++不支持变长数组。
8、
构造函数有其特殊的地方:其名称与类名是一样的。因此,与赋值运算符、析构函数以及其它成员函数不同,构造函数不能被用户直接使用。如下的使用情况将会被解释为创建了一个CLS的临时对象,并没有给数据成员m_i赋值,所以m_i没有被初始化,cout << obj.m_i << endl;的输出是一个不确定的值。
CLS()
{
CLS(0); // 创建了一个CLS的临时对象,并没有给数据成员m_i赋值
}
9、
前四种,即缺省构造函数、拷贝构造函数、析构函数和赋值运算符。
10、
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
输出false。因为(int)a是进行强制类型转换,这种转换是逻辑意义上的转换,即编译器进行的是数学意义上的近似等值转换,转换的结果是1。而(int&)a是将a转换为一个int引用,进行的是位转换。由于float 的 1.0 和int 的 1 在内存中的表示是不一样的,所以对同一个float对象a=1.0f进行值转换和位转换的结果是不相等的。
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
这种情况下的输出却是 true。这是因为 float 的 0.0 和 int 的 0 在内存中的表示是一样的。
对于上面的问题,如果你清楚了float的IEEE的表示方法,就会更加明白为什么了。
11、
for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组
vector::size_type的实际类型为 unsigned int,而unsigned int是始终大于等于0的,不可能小于0,所以上面的循环条件 i>=0 永远是true,不能变为false,这就是问题之所在。这种情况下必须使用signed int(即int)。
12、
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
if( 2 == *itor ) array.erase( itor );
}
这种情况下对于相邻的两个元素 2,只能消除开始的一个2,第二个 2 没有被消除(请自己分析一下为什么会出现这种情况)。改为下面的程序就可以全部消除了:
for( IntArray::iterator itor=array.begin(); itor!=array.end(); )
{
if( 2 == *itor ) array.erase( itor );
else ++itor;
}
13、
要考虑到内存有重叠的情况。Top
50 楼jordan1(班君)回复于 2005-04-25 17:16:54 得分 0
等楼主入答案,有许多还是不明白啊,也许是我太笨了吧!呵呵Top
51 楼sinro1983()回复于 2005-04-25 22:48:55 得分 0
学习中!!!Top
52 楼chchmily(chchmily)回复于 2005-04-25 23:56:35 得分 0
xue xiTop
53 楼a112319124728(彪)回复于 2005-04-26 06:58:03 得分 0
upTop
54 楼minanqiang(我是天上的飞鸟)回复于 2005-04-27 12:48:06 得分 0
.......Top
55 楼magic_laubj2008(C++初学者)回复于 2005-04-27 16:44:58 得分 0
学习Top
56 楼holmesma(水清鱼跃)回复于 2005-04-27 17:28:54 得分 0
markTop
57 楼lonelyforest(一生所爱)回复于 2005-04-27 17:54:00 得分 0
看来牛人不少,以后还要向诸位“牛人” 好好学习啊!Top
58 楼hbyufan()回复于 2005-04-27 20:36:27 得分 0
upTop
59 楼mayeyun(mayeyun)回复于 2005-04-27 20:51:19 得分 0
向楼上的牛人致敬!Top
60 楼leconte(leconte)回复于 2005-04-27 20:55:11 得分 0
#include <iostream>
第7题我直觉应该不能运行成功,不过在gcc下试验居然可以。
谁能解释为什么。cin改为scanf就不行
#include <vector>
#include <cstdio>
using namespace std;
int main( void )
{
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
for (int i=0;i<size2-1;++i)
{
str2[i]='m';
}
str2[size2-1]='\0';
cout<<str2<<endl;
system("pause");
}
可正常输出mmm ...Top
61 楼ducktail()回复于 2005-04-27 23:15:11 得分 0
markTop
62 楼mostideal(三甲)回复于 2005-04-28 00:48:22 得分 0
关注。。Top
63 楼whyglinux(山青水秀)回复于 2005-04-28 11:10:19 得分 0
To leconte(leconte)
>> 第7题我直觉应该不能运行成功,不过在gcc下试验居然可以。
>> 谁能解释为什么。
GCC的扩展支持变长数组。在编译的时候加上 -std=c++98 -pedantic 可以把GCC的扩展功能屏蔽,并且对于程序中不符合C++标准的地方会给出出错信息。
>> cin改为scanf就不行
在我这里一切正常(GCC 3.3.3)。不知道你是编译错误还是运行错误。如果是运行错误,要保证scanf写的是正确的。Top
64 楼leconte(leconte)回复于 2005-04-28 18:05:51 得分 0
谢谢楼上。
我后来反应过来了。
gcc是支持C99标准的。
scanf也可以,是我弄错了Top
65 楼yunlang2233187(冰水湖)回复于 2005-04-28 18:13:21 得分 0
markTop
66 楼zinsserren(`泽)回复于 2005-04-28 18:26:22 得分 0
大哥们好厉害啊,我只是第一次在这里发帖子,也是初学C,请多多关照。Top
67 楼wgy913(冬日菩提)回复于 2005-04-28 20:10:18 得分 0
呵呵,这位你是C和C++一起学啊,
这样可以吗?我学过C了,现在在学C++,那我不是比你晚了点啊,唉Top
68 楼brianlu(-)回复于 2005-05-01 11:59:16 得分 0
markTop
69 楼inlin()回复于 2005-05-01 14:07:11 得分 0
看看Top
70 楼kenyle(哎呀妈呀~这不就是传说中的B13吗~~)回复于 2005-05-01 22:45:15 得分 0
5. 以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
1、C中这样写是有问题的,原因,struct是没有成员函数的。(引用C++)的说法
2、C++中这样写将会认为是一个类的特例。其属性为public,但好象不可以有构造函数,只可以有成员函数和数据成员吧。记不清了,乱说~Top
71 楼kenyle(哎呀妈呀~这不就是传说中的B13吗~~)回复于 2005-05-01 22:59:40 得分 0
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?
cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?
cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?
这个题目好象是要了解什么是char\const char\const char*
由于C没有stirng所以char 的数组可以实现string
按我学习过程中老师帮着总结的经验这样读题。
从右至左,这个方法是个人所有,不要当公式用。
对于任意的情况我们例解分析如下。
const char * str6 = "abc" ;
“abc"字符串。
=赋值。
str6 标识符。
类形。
是一个指针 什么指针。
是一个char指针,
同时这个指针是一个const的。
于是我们可以知道。这个常量的字符指针指向的是一个字符串。
另个大家要搞清,指针常量与常量指针等之间的关系与可以被更改的是什么,不可以变的是什么。
指针常量不可以变的是地址,内容可以变,地址的内容可以变。
常量指针 内容不可以变,但是指向的地址可以变。
这个清华的书上讲得就很清楚了。其它的由于水平有限无法回答。学习ingTop
72 楼erxwu(溪中石)回复于 2005-05-05 12:30:16 得分 0
upTop
73 楼makedir(bear)回复于 2005-05-05 13:44:23 得分 0
学习!Top
74 楼awperpvip(挖靠我狂晕来CSDN这么久,竟不知道原来名字可以这么长)回复于 2005-05-05 14:21:00 得分 0
ding...回去调试一下.Top
75 楼qiqi162002(思想)回复于 2005-05-05 18:48:40 得分 0
没人回答第二问。
B向A的隐式转换就只有两种情况。在C++中,非内带类型的。
class B{operator A();}//有一个A的的操作符。
class A{A(B b)}//A中有一个构造函数以B型为常数,会隐式转换
就这两种情况了,自带类型就复杂一点了。Top
76 楼flyingdancing2005(返璞归C)回复于 2005-05-05 18:58:57 得分 0
learning.........Top
77 楼flyingdancing2005(返璞归C)回复于 2005-05-05 19:11:39 得分 0
第一题中的boolalpha是什么意思? //我是菜鸟,请高手解释.....Top
78 楼awperpvip(挖靠我狂晕来CSDN这么久,竟不知道原来名字可以这么长)回复于 2005-05-05 19:26:19 得分 0
以下三条输出语句分别输出什么?[C易]
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 输出false
cout << boolalpha << ( str3==str4 ) << endl; // 输出false
cout << boolalpha << ( str5==str6 ) << endl; // 输出false
Top
79 楼awperpvip(挖靠我狂晕来CSDN这么久,竟不知道原来名字可以这么长)回复于 2005-05-05 19:29:32 得分 0
加<<boolalpha 输出true 或 false
不加<<boolalpha 则输出1 或 0Top
80 楼flyingdancing2005(返璞归C)回复于 2005-05-06 16:36:03 得分 0
TO awperpvip()
谢了Top
81 楼aaww110(阿牛哥)回复于 2005-05-06 23:51:40 得分 0
其中有几道题目我知道答案,下周一公布!到时散分!
Top
82 楼maxuming914a1(马克)回复于 2005-05-07 03:58:56 得分 0
learning.........
Top
83 楼brucelee0224(li文5)回复于 2005-05-08 15:05:12 得分 0
upTop
84 楼xiaojun_036198()回复于 2005-05-08 15:48:41 得分 0
markTop
85 楼guofu_x(蝈蝈)回复于 2005-05-08 16:29:35 得分 0
12题有问题,没有定义类型,而是typedef vector<int> IntArrayTop
86 楼km3(北落师门)回复于 2005-05-08 16:34:04 得分 0
markTop
87 楼yangliyong1982(雨浮)回复于 2005-05-08 19:48:33 得分 0
markTop
88 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-05-10 10:14:06 得分 0
揭帖啊Top
89 楼mfg800917(下雪的冬天)回复于 2005-05-10 14:18:13 得分 0
upTop
90 楼husl(胡少磊)回复于 2005-05-11 13:09:50 得分 0
cout << boolalpha << ( *str1==*str2 ) << endl; // 输出什么?
cout << boolalpha << ( *str3==*str4 ) << endl; // 输出什么?
这样输出就是ture 了
str1 , str2 代表的 是地址
Top
91 楼gaviner((sorry)i am learning......)回复于 2005-05-11 13:19:53 得分 0
mark,,learningTop
92 楼husl(胡少磊)回复于 2005-05-11 13:20:42 得分 0
const char* str5 = "abc";
这表示什么意思啊 ?
cout << str5; // a
cout << *str5; // abc
cout << &str5; // 0012FF64 地址码
const int* a = 1; // char 换成 int 显然不行
const char* str5 = "abc"; 这声明了个什么 ?
指针的指针??
Top
93 楼fightintokyo()回复于 2005-05-11 13:27:12 得分 0
markTop
94 楼hackingtruth(尘封)回复于 2005-05-11 13:45:10 得分 0
UpTop
95 楼JonathanLee(唐宋)回复于 2005-05-11 14:00:15 得分 0
markTop
96 楼nicknide(封月翔天)回复于 2005-05-11 14:21:41 得分 0
6. 以下代码有什么问题?[C++易]
cout << (true?1:"1") << endl;
老的C++中是不可以通过?:返回不同类型,但是在新的标准中,允许这样的返回,所以说起来,这个地方没有问题Top
97 楼nicknide(封月翔天)回复于 2005-05-11 14:30:19 得分 0
5. 以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
错误很明显,main函数返回值不能为void
标注中明确过这一点,但是有很多从vc 6中过来的人还不明白这个,换到其他环境,比如 VC 7,编译不通过.Top
98 楼Passants(路过)回复于 2005-05-11 20:34:44 得分 0
10. 以下两条输出语句分别输出什么?[C++难]
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
输出:
1.0
1065353216
false
0
0
true
解释:
cout << (int)a << endl; 强制类型转换成1
cout << (int&)a << endl; 将a转换成整型引用,1.0的浮点表示是0 11111110 00000000000000000000000,变成int就是1065353216
cout << boolalpha << ( (int)a == (int&)a ) << endl; 当然是false
以下可以类推Top
99 楼abcabc999()回复于 2005-05-11 21:59:23 得分 0
upTop
100 楼threadpaper(便桶超人)回复于 2005-05-11 23:46:36 得分 0
const char* str5 = "abc"; 这声明了个什么 ?
指针的指针??
str5指向的内存空间的数据是只读(不可变的),但是str5可以指向新的内存地址。
如果不加const 碰到类似 *(str5 + 1) = 'c' 这样的语句,编译连接不会报错,运行就不对了
Top
101 楼erxwu(溪中石)回复于 2005-05-24 19:56:02 得分 0
upTop
102 楼pure_flame()回复于 2005-05-24 20:41:09 得分 0
第四题的Test b();这样创建对象b有问题,应该把()去掉,否则编译器会将它是为一个返回为Test类型的函数了.Top
103 楼wayne92(毓轩(魔鬼训练中))回复于 2005-05-24 22:53:15 得分 0
mark
学习Top
104 楼WateryHeart1984()回复于 2005-05-24 23:48:08 得分 0
up lao_du(阿东 Aonon【dd】)Top
105 楼WateryHeart1984()回复于 2005-05-24 23:50:23 得分 0
up whyglinux(山青水秀)Top
106 楼duke1996(笑傲人生)回复于 2005-05-25 10:40:44 得分 0
markTop
107 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-05-25 17:20:53 得分 0
揭帖啊Top
108 楼whatsouta(某疯子)回复于 2005-05-25 17:54:23 得分 0
好东西南北啊
下载Top
109 楼whatsouta(某疯子)回复于 2005-05-25 18:09:04 得分 0
const char* str5 = "abc"; //声明一char指针,指向字符串常量;且char指针只读,不能被修改; str5为一指向 存放字符串常量"abc"地址的 指针; sizeof 返回 指针大小 4B.
我觉得是指针指向的内容只读,指针可写.
const char *str5 = "abc"
相当于
const char str[] = "abc";
cahr *str5 = char;
即 *str5 = "def"; 是不允许的, str5 = "def"; 是许的.Top
110 楼umbrella1984(雨伞(KEN))回复于 2005-05-26 01:23:42 得分 0
学习。Top
111 楼magicsnake(北极狐)回复于 2005-05-26 10:06:08 得分 0
嗯,有空再看看Top
112 楼csoapy(就是不结贴)回复于 2005-05-26 14:41:38 得分 0
whyglinux(山青水秀) 说得对,
把 const char* str6 = "abc";的"abc"改成"abcd",结果就是false了?Top
113 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-05-26 15:54:25 得分 0
upTop
114 楼sonhehlee()回复于 2005-05-27 11:30:51 得分 0
学习ing......Top
115 楼the777(第九天魔王)回复于 2005-05-28 21:37:22 得分 0
这是不是你的作业呀???Top
116 楼lingjingqiu(空明流转)回复于 2005-05-28 22:05:56 得分 0
犯不着高手,题目又不难。编译一下不就知道了Top
117 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-05-28 22:36:58 得分 0
boolalpha,这个东东,没见过,难道是判断真假用的??Top
118 楼angelight(流氓ごХiǎО子)回复于 2005-05-28 23:03:45 得分 0
都不看不懂哦
我刚学C 别打击我的信心哦Top
119 楼andy_bin(乐逍遥)回复于 2005-05-29 01:09:30 得分 0
向楼上的牛人致敬!
学习ing....!
Top




