1. 以下三条输出语句分别输出什么?[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; // 输出什么?
答: 分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和 str4同上,只是按const语义,它们所指向的数据区不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形 式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。
2. 以下反向遍历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;
}
答:首先数组定义有误,应加上类型参数:vector<int> array。其次vector::size_type被定义为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环失去控制。
3. 以下两条输出语句分别输出什么?[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; // 输出什么?
答: 分别输出false和true。注意转换的应用。(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1,(int&)a则是告 诉编译器将a当作整数看(并没有做任何实质上的转换)。因为1以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。对b的两种转换意义同 上,但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。
注意,程序的输出会显示 (int&)a=1065353216,这个值是怎么来的呢?前面已经说了,1以浮点数形式存放在内存中,按ieee754规定,其内容为 0x0000803F(已考虑字节反序)。这也就是a这个变量所占据的内存单元的值。当(int&)a出现时,它相当于告诉它的上下文:“把这块 地址当做整数看待!不要管它原来是什么。”这样,内容0x0000803F按整数解释,其值正好就是1065353216(十进制数)。
通过查看汇编代码可以证实“(int)a相当于重新构造了一个值等于a的整型数”之说,而(int&)的作用则仅仅是表达了一个类型信息,意义在于为cout<<及==选择正确的重载版本。
4. 以下代码有什么问题?[C++易]
struct Test
{
??? Test( int ) {}
??? Test() {}
??? void fun() {}
};
void main( void )
{
??? Test a(1);
??? a.fun();
??? Test b();
??? b.fun();
}
答:变量b定义出错。按默认构造函数定义对象,不需要加括号。
5. 以下代码有什么问题?[C++易]
cout << (true?1:"1") << endl;
答:三元表达式“?:”问号后面的两个操作数必须为同一类型。
?
6. 以下代码有什么问题?[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 );
}
答:同样有缺少类型参数的问题。另外,每次调用“array.erase( itor );”,被删除元素之后的内容会自动往前移,导致迭代漏项,应在删除一项后使itor--,使之从已经前移的下一个元素起继续遍历。
8. 以下代码能够编译通过吗,为什么?[C++易]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。
9. 以下代码中的输出语句输出0吗,为什么?[C++易]
struct CLS
{
??? int m_i;
??? CLS( int i ) : m_i(i) {}
??? CLS()
??? {
??????? CLS(0);
??? }
};
CLS obj;
cout << obj.m_i << endl;
答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。
10. C++中的空类,默认产生哪些类成员函数?[C++易]
答:
class Empty
{
public:
??? Empty();????????????????????????? // 缺省构造函数
??? Empty( const Empty& );??????????? // 拷贝构造函数
??? ~Empty();???????????????????????? // 析构函数
??? Empty& operator=( const Empty& ); // 赋值运算符
??? Empty* operator&();?????????????? // 取址运算符
??? const Empty* operator&() const;?? // 取址运算符 const
};
11. 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
答:
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;
}
12. 以下代码中的两个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;
答: 函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态 定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看, 一个指针为4个字节,因此返回4。
13. 非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& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
int Strcmp(char *str1, char *str2)
{
?? int i=0;
?? int b=0;
?? while(str1[i]||str2[i])
?? {
????? if(str1[i]>str2[i])
????? {
???????? b=1;break;
????? }
????? else if(str1[i]<str2[i])
????? {
???????? b=-1;break;
????? }
????? i++;
?? }
?? return b;
}
***************************************************************************************************************
1.说出下面这个程序的运行结果,并简要叙述其理由:
char buf1[10]="hello";
char buf2[10]="hello";
if (buf1==buf2)
printf("equal!");
else printf("not equal!");
因为buf1,buf2分配了不同的内存块,而比较的是数组名,实际上是两个分别指向数组起始元素地址的指针。
2.指出下面这段程序中存在一些什么问题:
int loop,a[5];
int* p=a;
for (loop=0;loop<5;loop++)
{ p++;
*p=loop;
}
数组a[5]在创建时没有初始化, 在for循环里也没有起到完全初始化数组的作用,而且对一块未知内存赋值。在最后一轮循环
结束时p指向了数组a[5]的最后一个元素的下一个地址。
string 系列
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ );
return address;
}
char* strncpy(char* strdest, const char* strsrc, int n)
{
?? assert((strdest != NULL) && (strsrc != NULL));
?? char* address = strdest;
?? while(n-- > 0)
????? *strdest++ = *strsrc++;
?? return address;
}
int strcmp(const char* str1, const char* str2)
{
?? assert((str1 != NULL) && (str2 != NULL);
?? int ret = 0;
?? while (!(ret = (unsigned char*)*str1 - (unsigned char*)*str2) && (*str2))
?? {
????? str1++;
????? str2++;
?? }
?? if (ret > 0)
????? ret = 1;
?? else if (ret < 0)
????? ret = -1;
?? return ret;
}
int strlen(const char* str)
{
?? assert(str != NULL);
?? int len = 0;
?? while ('\0' != *str++)
????? len++;
?? return len;
}
类string的构造函数
string::string(const char* str)
{
?? if(str == NULL)
?? {
????? m_data = new char[1];
????? *m_data = '\0';
??? }
??? else
??? {
?????? int length = strlen(str);
?????? m_data = new char[str + 1];
?????? strcpy(m_data, str);
???? }
}
string 的析构函数
string::~string()
{
?? delete [] m_data;
}
没有合适的资源?快使用搜索试试~ 我知道了~
TXT面试书
共44个文件
txt:44个
需积分: 0 19 下载量 79 浏览量
2008-08-05
19:16:33
上传
评论
收藏 256KB RAR 举报
温馨提示
比较全面的TXTTXT面试书<br>自己放手机里看的
资源详情
资源评论
资源推荐
收起资源包目录
TXT面试书.rar (44个子文件)
TXT面试书
新人试用期要注意.txt 1KB
百度电话面试技术题.txt 230B
试用期应该注意什么.txt 6KB
面试技巧.txt 6KB
面试3.txt 21KB
个职场老油子对应届毕业生悄悄地说.txt 19KB
应届毕业生签约要注意维权 .txt 2KB
C++程序员应聘常见面试题.txt 17KB
给应届毕业生签约前看看.txt 8KB
应届生签约前必须搞清楚的4个问题 .txt 2KB
应届生签约之前(经典).txt 14KB
C++面试试题荟萃
C++面试试题荟萃
C++面试题侧重点.txt 819B
面试问题归纳列举.txt 4KB
C++ 面试题-2.txt 9KB
C++面试题-1.txt 2KB
C++面试题-4.txt 6KB
C++面试题-7 WCDMA.txt 9KB
客户化定制面试问题归纳列举.txt 6KB
C++面试题-5.txt 1KB
C++面试题-3.txt 1KB
安全度过试用期 .txt 7KB
C++面试题大全.txt 18KB
面试2.txt 7KB
c与c++面试题汇总.txt 81KB
新人的关键90天 操作5要点.txt 2KB
试用期,正反表现大对比.txt 6KB
求职者在试用期应注意事项.txt 5KB
什么是五险一金.txt 7KB
CC++面试笔试题目.txt 8KB
试用期注意事项.txt 6KB
简历技巧.txt 6KB
c+c++.txt 106KB
关键三个月,不要卷入是非漩涡.txt 2KB
支招:教你如何顺利度过工作试用期 .txt 3KB
应届生初入职场N注意.txt 3KB
面试1 .txt 11KB
轻松闯过难熬试用期.txt 2KB
大学生就业签约注意事项.txt 5KB
女性职业生涯规划五要点.txt 4KB
如何走过试用的那些日子.txt 4KB
新人如何迈过试用这道槛.txt 5KB
求职笔试大全.txt 57KB
签约就业协议要特别注意的事项.txt 2KB
试用期要注意的.txt 4KB
共 44 条
- 1
qiqi323
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0