龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

程序员必看 c++笔试题汇总(1)(3)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
9. 结构与联合有和区别? 1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地

9. 结构与联合有和区别?

1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。

2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

10. 下面关于“联合”的题目的输出?

  1. a)  
  2.  
  3. #i nclude   
  4. union 
  5. {  
  6. int i;  
  7. char x[2];  
  8. }a;  
  9.  
  10.  
  11. void main()  
  12. {  
  13. a.x[0] = 10;  
  14. a.x[1] = 1;  
  15. printf("%d",a.i);  
  16. }  
  17. 答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)  
  18.  
  19. b)  
  20.  
  21. main()  
  22. {  
  23. union/*定义一个联合*/ 
  24. int i;  
  25. struct/*在联合中定义一个结构*/ 
  26. char first;  
  27. char second;  
  28. }half;  
  29. }number;  
  30. number.i=0x4241; /*联合成员赋值*/ 
  31. printf("%c%cn", number.half.first, mumber.half.second);  
  32. number.half.first='a'/*联合中结构成员赋值*/ 
  33. number.half.second='b';  
  34. printf("%xn", number.i);  
  35. getch();  
  36. }  
  37. 答案: AB (0x41对应'A',是低位;Ox42对应'B',是高位)  
  38.  
  39. 6261 (number.i和number.half共用一块地址空间)  

11. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy.

答案:

  1. char *strcpy(char *strDest, const char *strSrc)  
  2. {  
  3. if ( strDest == NULL || strSrc == NULL)  
  4. return NULL ;  
  5. if ( strDest == strSrc)  
  6. return strDest ;  
  7. char *tempptr = strDest ;  
  8. while( (*strDest++ = *strSrc++) != ‘\0’)  
  9. return tempptr ;  

12. 已知String类定义如下:

  1. class String  
  2. {  
  3. public:  
  4. String(const char *str = NULL); // 通用构造函数  
  5. String(const String &another); // 拷贝构造函数  
  6. ~ String(); // 析构函数  
  7. String & operater =(const String &rhs); // 赋值函数  
  8. private:  
  9. char *m_data; // 用于保存字符串  
  10. }; 

尝试写出类的成员函数实现。

答案:

  1. String::String(const char *str)  
  2. {  
  3. if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断  
  4. {  
  5. m_data = new char[1] ;  
  6. m_data[0] = '\0' ;  
  7. }  
  8. else 
  9. {  
  10. m_data = new char[strlen(str) + 1];  
  11. strcpy(m_data,str);  
  12. }  
  13.  
  14. }   
  15.  
  16. String::String(const String &another)  
  17. {  
  18. m_data = new char[strlen(another.m_data) + 1];  
  19. strcpy(m_data,other.m_data);  
  20. }  
  21.  
  22.  
  23. String& String::operator =(const String &rhs)  
  24. {  
  25. if ( this == &rhs)  
  26. return *this ;  
  27. delete []m_data; //删除原来的数据,新开一块内存  
  28. m_data = new char[strlen(rhs.m_data) + 1];  
  29. strcpy(m_data,rhs.m_data);  
  30. return *this ;  
  31. }  
  32.  
  33.  
  34. String::~String()  
  35. {  
  36. delete []m_data ;  
  37. }  


精彩图集

赞助商链接