最近遇到问题

最近笔试面试的一些问题和感触 ,都是c,c++ 基础题 , 主要是做的题太少。 基础真的是没有, 这几年的大学生活都被狗吃了 真的很想吐槽自己的大学生活。 感觉找工作的一个月 都比大学学的基础都多。 现在不讲这些 马上把一些基础问题 重新回顾一下把。(最近复习我的C++啊)

class Bass {



public:



    Bass(){x = 1;}



 



    int x;



};



 



class Derive :public Bass {



    



    



public:



    Derive(){x = 2;}



 



    int x ;



};



 



 



int main(int argc, const char * argv[])



{



 



    Derive d;



    Bass & b1 = d;



    printf(" %i ,%li,%li",b1.x ,sizeof(b1),sizeof(d));



    return 0;



}



 输出 : 1 4 8 

记得面试碰到最多的问题是 sizeof  操作符的问题  一开始我都不知道这些 后来。。。。

看了 http://lemonmilk.blog.51cto.com/  找一段重要的贴一下

4。结构类型



在上面的程序中,



struct str{

                          double d;

                         char ch;

                          int data;

 }str_wu;

 struct str1{

                           char ch;

                            double d;

                             int data;

 }str_wu1;



两个不同的结构,但是内部的元素是相同的,都是double,intchar,只是顺序不一样,就结果不一样。why?



这时因为VC存储数据的时候要对其,具体的情况如下:



类型

  对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)



  Char

  偏移量必须为sizeof(char)即1的倍数



  int 

  偏移量必须为sizeof(int)即4的倍数



  float

  偏移量必须为sizeof(float)即4的倍数



  double

  偏移量必须为sizeof(double)即8的倍数



  Short

  偏移量必须为sizeof(short)即2的倍数



比如:str_wu,为上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof(int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8+1+3+4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。所以整个结构的大小为:sizeof(str_wu)=8+1+3+4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。

还有好多是基础的太基础的问题  我都忽略了。 

来个简单的算法把

  参考:http://hi.baidu.com/aztfei/item/70042cdf3103fa866cce3fd0

 1 关于找出数组中第二大的数

 2 

 3 public int FindSecond(int[] arr)

 4 {

 5 int length=arr.length; //数组长度

 6 int max=arr[0];    // 当前第一项为最大项

 7 int second=arr[1]; //当前第二项为最大项

 8 if (max < second)     //比较第一二项的大小,根据大小设定max,second

 9 {

10    int temp = max;

11    max = second;

12    second = temp;

13 }

14 for(int i=2;i<length;i++)     //让后续的每一项和max,second比较,

15 {

16    if (arr[i] > max)            //修改max的值

17    {

18     second = max;

19     max = arr[i];

20    }

21    else if (arr[i] < second)   //比second小继续循环。

22    {

23     continue;

24    }

25    else                               // 此项即比max小,但比second数组大的项,把它重新复制给second

26    {

27     second = arr[i];

28    }

29 }

30 return second;

31 }

将字符串反序输出 

//反序一个字符串

void reverse(char s[])

{

 char c;

 int i,j;

 j = strlen(s) - 1;

 for(i = 0;i < j;i ++)

 {

  c = s[i];

  s[i] = s[j];

  s[j] = c;

  j --;

 }

}



void main(void)

{

 char str[LENGTH + 1];

 cout<<"Input a string:";

 cin>>str;

 reverse(str);

 cout<<"The string is reversed:"<<str<<endl;

}

 

问的最多的就是 手游的屏幕适配问题  可以看看

  http://blog.csdn.net/xiaominghimi/article/details/8918235

  http://www.ityran.com/archives/4018

最近逼自己做了一个完整的 demo 去应聘  , 那样即使你C++ 不是很好。 面试的大牛也会对你好点的 , 不会太为难你, 工资还可观点呵呵。

demo 就不放出来了。 呵呵。 技术太次了。

  想做手游的还是得看C++啊。

 

以上是我的最近面试碰到多一点的题, 有好多还没有整理 等有条件的把。

  最头疼的是 做那些操作系统 的题, 要看啊。 

做游戏那么麻烦么。 

  注: c++ c  数据结构  算法  操作系统  等

  

 

你可能感兴趣的:(问题)