上午到烽火众智笔试,考的都是基础题,但好多还是答不出来或不确定,自己基础还是太差。深感学习心浮气躁之弊,遂想潜心修炼,每日一记,亡羊补牢,未为晚也。
以下是记下的部分笔试题目,回来研究。
1、下面程序的执行结果是:
#include <iostream>
using namespace std;
void main()
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
char *str5 = str1;
char *str6 = str1;
char *str7 = str2;
char *str8 = str2;
cout << (str1 == str2) <<endl;
cout << (str3 == str4) <<endl;
cout << (str5 == str6) <<endl;
cout << (str7 == str8) <<endl;
}
以上是我自己在VC6.0中输入的,原题只有main函数体中的内容。
若不加using namespace std; 则报错cout无法识别。
运行结果:0
0
1
1
而自己答的是1 1 0 0 ,竟没有一个对的。
现分析原因。
单步运行,在watch窗口中看各表达式的值:
显然,str1、str2、str3、str4、分别是存放字符串的地址,它们是不同的变量,地址当然各不相同。
而且都是在栈上分配的内存,每个变量分配了4字节的内存空间。
str5、str6为str1的内存首地址,str、str8为str2的内存首地址。
至此,答案很显然了。
队和站的区别,常看才能掌握http://blog.youkuaiyun.com/hairetz/article/details/4141043
2、写一个C函数,判断大小端
我写的是:
int is_Big_endian()
{
return (0x01>>1) >0 ? 1:0;
}
后来一想觉得不大对,因为0x01是以整型参与运算的,移位后的结果恐怕不能确定。
http://blog.youkuaiyun.com/yujianrong/article/details/6071595这是网上找的方法,第三种比较好懂:
unsigned char chk_cpu(void)
{
int data=0x0011;
char temp = *(char*)&data;
if(temp == 0)
return 0;
else
return 1;
}
这题恐怕也要泡汤了。
还有单向链表的插入、删除、查询,string类型的构造函数、析构函数和赋值函数,手写代码,实在太生疏。
网络通信的模型、路由器工作原理等,看来还要恶补。