CC++笔试经典题目 1
2012-03-08 17:37
232 查看
1. 以下三条输出语句分别输出什么?
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; // 输出什么?
答:分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。
2. 以下代码中的两个sizeof用法有问题吗?
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;
答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
3. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?
答:
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& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
4. 以下代码有什么问题?
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
答:变量b定义出错。按默认构造函数定义对象,不需要加括号。
5. 以下代码有什么问题?
cout << (true?1:"1") << endl;
答:三元表达式“?:”问号后面的两个操作数必须为同一类型。
6. 以下代码能够编译通过吗,为什么?
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。
posted on 2007-09-04 00:43
旅途 阅读(218)
评论(3) 编辑 收藏
引用 所属分类:
C/C++
char *A_a(char *s)
{
if(NULL==s)
throw "invalid argument";
char *p=s;
char temp='a'-'A';
while(*s)
{
if(*s>='A' && *s<='Z')
*s=*s+temp;
++s;
}
return p;
} 回复 更多评论
char *A_a(char *s,int size)
{
if(NULL==s)
throw "invalid argument";
char *p=s;
char temp='a'-'A';
int i;
for(i=0;i<size;i++)
{
if(s[i]>='A' && s[i]<='Z')
s[i]=s[i]+temp;
}
return p;
} 回复 更多评论
#include<iostream>
using namespace std;
void main(void)
{
cout<<(2>1?"yes":"no")<<endl;//yes
cout<<(1>2?true:false)<<endl;//0
int a=0;
(1+2==3)?a=100:a=200;
cout<<a<<endl;//100
char s1[20];
'a'=='A'?strcpy(s1,"hello"):strcpy(s1,"happy");
cout<<s1<<endl;//happy
//... ...
}
/*--
yes
0
100
happy
Press any key to continue
--*/
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; // 输出什么?
答:分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。
2. 以下代码中的两个sizeof用法有问题吗?
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;
答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
3. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?
答:
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& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
4. 以下代码有什么问题?
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
答:变量b定义出错。按默认构造函数定义对象,不需要加括号。
5. 以下代码有什么问题?
cout << (true?1:"1") << endl;
答:三元表达式“?:”问号后面的两个操作数必须为同一类型。
6. 以下代码能够编译通过吗,为什么?
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。
posted on 2007-09-04 00:43
旅途 阅读(218)
评论(3) 编辑 收藏
引用 所属分类:
C/C++
Feedback
# re: CC++笔试经典题目 12009-01-30 15:51http://www.ok2002.com/
//指针的方法实现大写转小写char *A_a(char *s)
{
if(NULL==s)
throw "invalid argument";
char *p=s;
char temp='a'-'A';
while(*s)
{
if(*s>='A' && *s<='Z')
*s=*s+temp;
++s;
}
return p;
} 回复 更多评论
# re: CC++笔试经典题目 12009-01-30 15:52http://www.ok2002.com/
//数组的方法实现char *A_a(char *s,int size)
{
if(NULL==s)
throw "invalid argument";
char *p=s;
char temp='a'-'A';
int i;
for(i=0;i<size;i++)
{
if(s[i]>='A' && s[i]<='Z')
s[i]=s[i]+temp;
}
return p;
} 回复 更多评论
# re: CC++笔试经典题目 12009-01-30 16:25http://www.ok2002.com/
//C++ 三元表达式“?:”问号后面的两个操作数必须为同一类型#include<iostream>
using namespace std;
void main(void)
{
cout<<(2>1?"yes":"no")<<endl;//yes
cout<<(1>2?true:false)<<endl;//0
int a=0;
(1+2==3)?a=100:a=200;
cout<<a<<endl;//100
char s1[20];
'a'=='A'?strcpy(s1,"hello"):strcpy(s1,"happy");
cout<<s1<<endl;//happy
//... ...
}
/*--
yes
0
100
happy
Press any key to continue
--*/
相关文章推荐
- 大公司笔试面试有哪些经典算法题目?
- 笔试题大题-经典题目
- 100条经典C语言笔试题目(上)
- 笔试经典题目--随机产生不重复的N个数字
- 2015 百度笔试的一道经典题目
- 括号匹配问题与经典笔试面试题目解析
- 几道经典的SQL笔试题目(有答案)
- 【转载】经典.net面试题目【为了笔试。。。。。】
- 几道经典的SQL笔试题目(有答案)
- C/C++校招笔试面试经典题目总结五
- 100 条经典C语言笔试题目
- 经典C++笔试题目--100(C++面向对象的特性(38-61))
- C++笔试经典题目总结
- 100条经典C语言笔试题目
- 经典笔试题目
- C/C++校招笔试面试经典题目总结九
- 经典笔试题目分析
- 经典笔试题目
- 嵌入式程序员C语言笔试经典题目
- C/C++校招笔试面试经典题目总结一