搜集面试题,大家分享~
马上毕业,搜集了些面试题准备准备,发出来有需要的朋友共同学习,找出最优算法~~~(没分,仅是学习)
1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。
2.写一个函数,将其中的\t都转换成4个空格。
3.Windows程序的入口是哪里?写出Windows消息机制的流程。
4.如何定义和实现一个类的成员函数为回调函数?
5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。
6.C++里面如何声明const void f(void)函数为C程序中的库函数?
问题点数:20、回复次数:30Top
1 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-30 16:22:37 得分 0
第2题:
char *changeToSpac(char *strDes, const char *strSrc)
{
char *addr = strDes;
while(*strSrc != '\0')
{
if(*strSrc == '\t')
{
for(int i = 0; i < 4; i++) *strDes++ = ' ';
strSrc++;
}
else
{
*strDes++ = *strSrc++;
}
}
return addr;
}Top
2 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-30 16:28:00 得分 0
3.Windows程序的入口是哪里?写出Windows消息机制的流程
入口winmain()函数
消息机制:
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) //进行主动查取消息,为else争取处理机会
{
TranslateMessage(&msg); //分解消息
DispatchMessage(&msg); //分发消息
}
else
{
//
}
}
然后通过窗口消息处理函数winprocess()进行消息判断,做响应执行~Top
3 楼lonelyforest(一生所爱)回复于 2006-03-30 20:00:50 得分 0
天哪, 这都是那儿的啊? 那家公司的题目啊?
5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。
不是! 在 main 前面定义一个类数据类型, 比如 ClassT example;他有自己的构造函数,这个构造函数在main之前应该就开始执行了。
main 不过是一个程序的入口而已。 至于所有的动作呢, 那就多了, 用户也有动作嘛!Top
4 楼lonelyforest(一生所爱)回复于 2006-03-30 20:03:48 得分 0
2.写一个函数,将其中的\t都转换成4个空格。
应该是字符串中的吧?难道要遍历? 再进行插入? 比较麻烦吧。Top
5 楼LiHubei(lhb)回复于 2006-03-30 21:48:49 得分 0
学习Top
6 楼adad184(高圆圆)回复于 2006-03-30 22:05:44 得分 0
第2题
#define \t " "
可以不?Top
7 楼adad184(高圆圆)回复于 2006-03-30 22:06:55 得分 0
5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。
比如 定义全局变量?
6.C++里面如何声明const void f(void)函数为C程序中的库函数?
extren "C" const void f(void);
Top
8 楼cutenoob(cute )回复于 2006-03-30 22:16:18 得分 0
第2题
#define \t " "
可以不?
====================
同问...Top
9 楼dream2013(每个人都有魔鬼的一面( http://blog.sina.com.cn/u/1422260677 ))回复于 2006-03-30 22:27:38 得分 0
markTop
10 楼Chulangzi(楚浪子-我要变强!)回复于 2006-03-30 23:32:26 得分 0
markTop
11 楼welfarefanwei(伟大)回复于 2006-03-31 07:56:46 得分 0
好的,MarkTop
12 楼qiujian5628(浪迹天涯)回复于 2006-03-31 08:44:38 得分 0
markTop
13 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-03-31 08:59:33 得分 0
学习
Top
14 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-31 09:34:23 得分 0
改变特定字符串 宏的范围是不是大了点~Top
15 楼jiang_xiao(原来秋天)回复于 2006-03-31 13:11:01 得分 10
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; // 输出什么?
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& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
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;
7. 以下代码有什么问题?[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;
4. 以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
5. 以下代码有什么问题?[C++易]
cout << (true?1:"1") << endl;
8. 以下代码能够编译通过吗,为什么?[C++易]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char 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
};
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; // 输出什么?
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;
}
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 );
}
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;
}
int main( void )
{
char str[] = "0123456789";
mymemcpy( str+1, str+0, 9 );
cout << str << endl;
system( "Pause" );
return 0;
}
Top
16 楼wofish2()回复于 2006-03-31 14:23:18 得分 0
markTop
17 楼giggsjw(秋叶)回复于 2006-03-31 16:16:32 得分 0
作个记号,慢慢学习!Top
18 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-31 19:59:23 得分 0
是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?
virtual修饰符会被隐形继承的。
private 也被继承,只事派生类没有访问权限而已
virtual可加可不加子类的空间里有父类的所有变量(static除外)同一个函数只存在一个实体(inline除外)子类覆盖它的函数不加virtual ,也能实现多态。
在子类的空间里,有父类的私有变量。私有变量不能直接访问。
===================================================================
输入一个字符串,将其逆序后输出。
void Swap(char &lhs, char &rhs)
{
char temp = lhs;
lhs = rhs;
rhs = temp;
}
char *reserveStr(char *strSrc)
{
char *addr = strSrc;
int left = 0;
int right = strlen(strSrc);
while( left != right )
{
Swap(strSrc[left++],strSrc[--right]);
}
return addr;
}
=================================================================
Top
19 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-31 20:00:45 得分 0
整型到字符串转换的非递归法:(正数)
void IntToStr( char *strDest, const int num )
{
int temp = num;
int end = 0;
while( (temp /=10) != 0 && strDest++ );
temp = num;
do
{
end = temp % 10;
*strDest-- = end + '0';
temp /= 10;
}while(temp !=0 );
}
Top
20 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-31 20:01:25 得分 0
//strlen再现
int strlen( const char *str ) //输入参数const
{
assert( strt != NULL ); //断言字符串地址非0
int len;
while( (*str++) != '\0' )
{
len++;
}
return len;
}
// strcpy再现
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’|| *strDest != ‘\0’ );
return address;
}
Top
21 楼slek(我浮躁,可是我很厚道!)回复于 2006-03-31 20:46:43 得分 2
class fatherclass
{
void print(){cout<<"father"<<endl;}
}
class sunclass:public fatherclass
{
void print(){cout<<"sub"<<endl;}
}
fatherclass T = new subclass();
T.print();
Top
22 楼fengzhiyi1(zhaoqingguo)回复于 2006-03-31 21:05:29 得分 2
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; // 输出什么?
-------------------------------------------------------
谁能解释一下这个问题?谢谢Top
23 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-04-01 10:27:35 得分 0
这个问题我也不清楚 等高人来学习~~~~~~~~Top
24 楼xiang1358(向圣海)回复于 2006-04-01 15:29:00 得分 3
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; // 输出什么?
-------------------------------------------------------
谁能解释一下这个问题?谢谢
-------------------------------------------------------
输出结果为:
1 //这个不用解释吧
2342398473298 (乱七八糟的东西) //cout << (int&)a 这句话是把a 转换成一个int型的
//引用作为参数传入,在Operator << (..)函数中所用
//到的是一个int型的引用,该引用对应的内存块是
//float 型变量 a 对应的内存。所以它会把变量a对应
//的内存块当成int读出,所以输出一个无意义的数据。
false //显然不相等,所以false
0
0 //虽然是把float当成int读出,但是还是0
true //所以是true
Top
25 楼socol(这个问题很难)回复于 2006-04-01 17:11:15 得分 3
输入一个字符串,将其逆序后输出。
void Swap(char &lhs, char &rhs)
{
char temp = lhs;
lhs = rhs;
rhs = temp;
}
char *reserveStr(char *strSrc)
{
char *addr = strSrc;
int left = 0;
int right = strlen(strSrc);
while( left<right&&left != right )//while( left != right )
{
Swap(strSrc[left++],strSrc[--right]);
}
return addr;
}
Top
26 楼caitian6()回复于 2006-04-01 17:18:59 得分 0
markTop
27 楼longge520(longge520)回复于 2006-04-02 21:35:52 得分 0
markTop
28 楼crescentg(我找不到改昵称的地方了,谁教教我呀)回复于 2006-04-03 09:43:00 得分 0
jiang_xiao(原来秋天) 的题不错Top
29 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-04-03 09:49:00 得分 0
顶起来有题的贴哦~Top
30 楼laomai(老迈)回复于 2006-04-03 17:41:24 得分 0
根据c/c++其他技术问题的版规http://community.csdn.net/Expert/topic/4651/4651859.xml?temp=.6940729,
本贴被移动到c/c++新手乐园版面Top




