程序员必看 c++笔试题汇总(1)(3)
9. 结构与联合有和区别?
1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。
10. 下面关于“联合”的题目的输出?
- a)
- #i nclude
- union
- {
- int i;
- char x[2];
- }a;
- void main()
- {
- a.x[0] = 10;
- a.x[1] = 1;
- printf("%d",a.i);
- }
- 答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)
- b)
- main()
- {
- union{ /*定义一个联合*/
- int i;
- struct{ /*在联合中定义一个结构*/
- char first;
- char second;
- }half;
- }number;
- number.i=0x4241; /*联合成员赋值*/
- printf("%c%cn", number.half.first, mumber.half.second);
- number.half.first='a'; /*联合中结构成员赋值*/
- number.half.second='b';
- printf("%xn", number.i);
- getch();
- }
- 答案: AB (0x41对应'A',是低位;Ox42对应'B',是高位)
- 6261 (number.i和number.half共用一块地址空间)
11. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy.
答案:
- char *strcpy(char *strDest, const char *strSrc)
- {
- if ( strDest == NULL || strSrc == NULL)
- return NULL ;
- if ( strDest == strSrc)
- return strDest ;
- char *tempptr = strDest ;
- while( (*strDest++ = *strSrc++) != ‘\0’)
- return tempptr ;
- }
12. 已知String类定义如下:
- class String
- {
- public:
- String(const char *str = NULL); // 通用构造函数
- String(const String &another); // 拷贝构造函数
- ~ String(); // 析构函数
- String & operater =(const String &rhs); // 赋值函数
- private:
- char *m_data; // 用于保存字符串
- };
尝试写出类的成员函数实现。
答案:
- String::String(const char *str)
- {
- if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断
- {
- m_data = new char[1] ;
- m_data[0] = '\0' ;
- }
- else
- {
- m_data = new char[strlen(str) + 1];
- strcpy(m_data,str);
- }
- }
- String::String(const String &another)
- {
- m_data = new char[strlen(another.m_data) + 1];
- strcpy(m_data,other.m_data);
- }
- String& String::operator =(const String &rhs)
- {
- if ( this == &rhs)
- return *this ;
- delete []m_data; //删除原来的数据,新开一块内存
- m_data = new char[strlen(rhs.m_data) + 1];
- strcpy(m_data,rhs.m_data);
- return *this ;
- }
- String::~String()
- {
- delete []m_data ;
- }
- 上一篇:C++的明天是否会依旧辉煌?
- 下一篇:深入剖析C/C++程序员应聘常见面试题