没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式Linux笔试题.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 84 浏览量
2022-07-14
12:15:39
上传
评论
收藏 129KB PDF 举报
温馨提示
试读
21页
嵌入式Linux笔试题.pdf
资源推荐
资源详情
资源评论
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 ”以常
量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。
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 非编译器期间常量,而数组定义要求长度必须为编译期常量。
During my test in linux environment. The above code could be compiled
successfully. But if we initialize the defined arrary like this “char str2[ size2 ] =
{0}; ”, there would be a compile error informing that “variable-sized object
`str2' may not be initialized ”.
7. 以下反向遍历 array 数组的方法有什么错误?
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 << endl;
}
答:首先数组定义有误,应加上类型参数: vector<int> array 。其次 vector::size_type
被定义为 unsigned int ,即无符号数,这样做为循环变量的 i 为0时再减 1 就会变成最大的
整数,导致循环失去控制。
8. 以下代码中的输出语句输出 0吗,为什么?
struct CLS
{
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
};
CLS obj;
cout << obj.m_i << endl;
答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为, 亦即仅
执行函数调用, 而不会执行其后的初始化表达式。 只有在生成对象时, 初始化表达式才会随
相应的构造函数一起调用。
9. C++ 中的空类,默认产生哪些类成员函数?
答:
class Empty
{
public:
Empty(); // 缺省构造函数
Empty( const Empty& ); // 拷贝构造函数
~Empty(); //
析构函数
Empty& operator=( const Empty& ); // 赋值运算符
Empty* operator&(); //
取址运算符
const Empty* operator&() const; // 取址运算符 const
};
10. 以下两条输出语句分别输出什么?
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<< 及== 选择正确的重载版
本。
①链表反转
单向链表的反转是一个经常被问到的一个面试题, 也是一个非常基础的问题。 比如一个链表
是这样的:
1->2->3->4->5
通过反转后成为
5->4->3->2->1
。
最容易想到的方法遍历一遍链表, 利用一个辅助指针, 存储遍历过程中当前指针指向的下一
个元素,然后将当前节点元素的指针反转后, 利用已经存储的指针往后面继续遍历。 源代码
如下:
1. struct linka {
2. int data;
3. linka* next;
4. };
5. void reverse(linka*& head) {
6. if(head ==NULL)
7. return;
8. linka *pre, *cur, *ne;
9. pre=head;
10. cur=head->next;
11. while(cur)
12. {
13. ne = cur->next;
14. cur->next = pre;
15. pre = cur;
16. cur = ne;
17. }
18. head->next = NULL;
19. head = pre;
20. }
还有一种利用递归的方法。这种方法的基本思想是在反转当前节点之前先调用递归函数反
转后续节点。 源代码如下。 不过这个方法有一个缺点, 就是在反转后的最后一个结点会形成
一个环,所以必须将函数的返回的节点的 next 域置为 NULL 。因为要改变 head 指针,所
以我用了引用。算法的源代码如下:
1. linka* reverse(linka* p,linka*& head)
2. {
3. if(p == NULL || p->next == NULL)
4. {
5. head=p;
6. return p;
7. }
8. else
9. {
10. linka* tmp = reverse(p->next,head);
11. tmp->next = p;
12. return p;
13. }
14. }
②已知 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
时会抛异常才会有这步判断
剩余20页未读,继续阅读
资源评论
lzx13599381087
- 粉丝: 2
- 资源: 9万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功