首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

几道笔试题,不清楚,请问。

2012-02-11 
几道笔试题,不清楚,请教。。。。。。。。。。。1.32位值 0x12345678,若写出12 34 56 78,是大头序还是小头序?_____ 反

几道笔试题,不清楚,请教。。。。。。。。。。。
1.32位值 0x12345678,若写出12 34 56 78,是大头序还是小头序?_____ 反序为____________

2.
class T1
{
}
sizeof(T1) = _____ //4?

class T2
{
public:
void func();
int i;
}
sizeof(T2) = _____ //8?

class T3
{
public:
virtual void func();
int i;
}
sizeof(T3) = _____ //12?


3.socket长时间挂起的原因?如何解决?

4.改错:
struct Tinfo
{
int nValue;
int *pdwPointer;
};
main()
{
Tinfo tinfo;
int *ptr = &tinfo.nValue;
ptr[0] = 4;
ptr[1] = 3;
tinfo.pdwPointer =ptr;
tinfo.pdwPointer[1] = 1;
tinfo.pdwPointer[0] = 2;
}

编程
5.
struct TBlock { int nIndex;int nValue;...} TBlock;
现有一数组 TBlock atArray[100];初始化值无序,请根据nIndex从小到大打印出nValue的值,不改变原数组元素的排序。

6.
思考题
写出在单一线程下,不断对一块缓冲区进行读写的类,数据先进先出,包含如下成员:
BOOL create(int bBufSize)
创建数据缓冲区
成功返回TRUE,失败返回FALSE
int read(unsigned char *pbuf,int nSize)
读取一定长度数据,写入数据缓冲区
返回值为实际读取长度
int write(unsigned char *pbuf,int nSize)
写入一定长度数据
返回值为实际写入长度




[解决办法]
1. big-endian. Small endin 是78 56 34 12
[解决办法]
2. 1, 4, 8
[解决办法]
第三题
设置keeplive参数
[解决办法]
去www.devdiv.net去问吧
[解决办法]
32位值 0x12345678,若写出12 34 56 78,是大头序还是小头序?_____ 反序为____________ 
~~~~~~~~~~~~~~~~
little endian Big endian是: 78 56 34 12 :高位放高地址,低位放低地址

[解决办法]
Tinfo tinfo;
int *ptr = &tinfo.nValue;
ptr[0] = 4;
ptr[1] = 3;
tinfo.pdwPointer =ptr;--------1
tinfo.pdwPointer[1] = 1;------2
tinfo.pdwPointer[0] = 2; -----3
假设:
0x0012FF78://nValue的地址
0x0012FF7C://pdwPointer的地址
在 1 处 pdwPointer指向了0x0012FF78,也就是说0x0012FF7C中的值为0x0012FF78
但是在 2 处 将0x0012FF7C中的值改为了 1 也就是说执行到3时这个pdwPointer不是执行原来的
ptr(0x0012FF78)而是指向了0x00000001
编译没错,运行时出错
[解决办法]
7楼错了,Big endian is : 0X12,0X34,0X56,0X78,
Little-Endian is :0X7i,0X56,0X34,0X12.
[解决办法]
1.32位值 0x12345678,若写出12 34 56 78,是大头序还是小头序?_____ 反序为____________ 
第一空:大头序.所谓大头即为:低位存储在高端...意思也就是说最大字节地址对应于数字最低有效字节.
第二空:78 56 34 12
下面是大头序存储...
低|12|
|34|
|56|
高|78|
当输出时候从低地址开始输出,为:12.....
2.1,4,8
因为默认的空类大小为1
而第二个类中有个Int..sizeof(t2)就是它的大小.故而为4
第三个类有个虚函数.那么类中就有一个指向虚函数表的指针.大小为4,加上int.即为8
7.提供思路..
两个人..在操场跑步..一个快.一个慢....如果他们跑的时间足够长...他们会遇上的...
两个指针分别代表两个人...让他们的步幅不同.如果两个指针最后会指向相同.则存在环.
[解决办法]
7题对链表求两次逆序就0k了,如果有环,第一次逆序会回到起点,没环就不会,第二次对链表还原
[解决办法]

C/C++ code
struct TNode{char Chval;TNode* PtNext;};TNode* Reverse(TNode *PtHead){    ASSERT(PtHead != NULL);    TNode *p = PtHead, *q=PtHead->PtNext;    p->PtNext = NULL;    while (NULL != q)    {        TNode *temp = q;        q = q->PtNext;        temp->PtNext = p;        p = temp;    }    return p;}bool Check(const TNode* PtHead){    ASSERT(PtHead != NULL);    if (PtHead->PtNext == NULL)        return false;    else if (PtHead->PtNext == PtHead)        return true;    bool bRet = false;    TNode *q = Reverse((TNode*)PtHead);    if (q == PtHead)        bRet = true;    Reverse(q);    return bRet;} 


[解决办法]
大端字节(Big-endian):
----------------->>>>>>>>内存地址增大方向
short变量地址
0x1000 0x1001
_____________________________
| |
| 0x31 | 0x32
|________________ | ________________
高位字节在低位字节的前面,也就是高位在内存地址低的一端.可以这样记住(大端->高位->在前->正常的逻辑顺序)
 
小端字节(little-endian):
----------------->>>>>>>>内存地址增大方向
short变量地址
0x1000 0x1001
_____________________________
| |
| 0x32 | 0x31
|________________ | ________________
低位字节在高位字节的前面,也就是低位在内存地址低的一端.可以这样记住(小端->低位->在前->与正常逻辑顺序相反)
[解决办法]
客户端从服务器读取数据的时候,如果服务端没有数据到来,那么客户端就会在调用read方法的时候被挂起,如果服务端出现了问题,一直没有发来数据,客户端便没办法结束挂起状态。

所以我想在调用read方法之前,先调用ready方法判断有没有数据到来,如果没有就sleep一段时间后再调用ready方法判断有没有数据,依次类推。

上面的第二种方法虽然防止了客户端被死锁,但是经常会在sleep的时候浪费不少时间以致效率降低。所以在这里请教一下大家,有没有一种方法能让调用read方法的时候,如果挂起的时间超出一定的值就自动解除挂起状态,抛出一个异常。
[解决办法]
第九题

C/C++ code
#include <iostream>using namespace std;int main(){    int n;    cin>>n;    int i,j,x(1),y(-1),beg_num(0),end_num(n*n+1);//x,y表示矩阵下标,beginnum和endnum一个正推    int **arr=new int*[n];                       //一个逆推    for(i=0;i<n;++i)        arr[i]=new int[n];    for(j=1;j<=n;++j)    {        for(int k=0;k<j;++k)        {            if(j%2==1)             {                arr[--x][++y]=++beg_num;    //右上前进                arr[n-x-1][n-y-1]=--end_num;//对角的相应值            }            else             {                arr[++x][--y]=++beg_num;    //左下前进                arr[n-x-1][n-y-1]=--end_num;            }        }        if(j%2==1) {x-=1;y+=2;}//为下一轮的左下前进做准备        else {y-=1;x+=2;}    }    for(i=0;i<n;++i)    {        for(j=0;j<n;++j)            cout<<arr[i][j]<<' ';        cout<<endl;    }    return 0;}
[解决办法]
3.socket长时间挂起的原因?如何解决? 
Socket Thread不足线程死锁
系统内存不足系统cpu忙系统文件描述符数目不足
[解决办法]
class T1 


sizeof(T1) = _____ //4? ----》1 空类就是1

class T2 

public: 
void func(); 
int i;

sizeof(T2) = _____ //8? -----> 4 就是 i的空间

class T3 

public: 
virtual void func(); 
int i; 

sizeof(T3) = _____ //12? ///----》8一个i + 一个虚表指针

[解决办法]
对这句ptr[1] = 3; 
我的理解是因为tinfo.nValue与tinfo.pdwPointer的地址是相连的,这句相当与给pdwPointer赋值,用vs2005验证,我的输出语句是cout<<"tinfo.pdwPointer="<<tinfo.pdwPointer<<endl;输出结果是tinfo.pdwPointer = 00000003。当我把结构体中int指针改为char型的
struct Tinfo 

int nValue; 
char *pdwPointer; 
}; 
用vs2005运行会中断。不管是int型还是char型pdwPointer存的是地址值,都是四个字节的大小,赋值ptr[1]=3没错,同样的输出语句而且只输出指针指向的地址值,为什么类型改为char型的会出错。

请各位高手解答下!谢谢!

热点排行