今天去贝尔面了次试,感觉比IBM简单很多,但是还是有很多的不懂,需要好好学习。
今天笔试又发现很多问题。
int *ip[4]; // array of pointers to int,指针数组,
int (*ip)[4]; // pointer to an array of 4 ints,数组指针,指向数组的指针
const int * P 和 int const * p 是一个东西,搞了半天我。
在 c++ 中new 和 malloc最大的不同时 new是可以用于构造的,而malloc只是用于分配内存。
char str[]="hello";
我这个一直认为是sizeof(str) = 4,但是这次却发现是6,应该是5+1,哎,太挫了。
char str[10];
如果是sizeof(str)则是10,但是如果将str作为参数传递则是4。如
void fun(char str[10]){
cout<<sizeof(str)<<endl;
}
这样的输出结果是4
这东西还是很搞的。
在c++中要注意使用int * p =new int(5);是申请一个int,值为5.要和int * p = new int [5];不同。
在使用c++构造函数和拷贝构造函数方面我还是没有搞清楚。
如果有个类是
Class Human;
Human Fuc(Human h1){//作为参数使用,调用拷贝构造
return h1;//临时对象需要析构
}
Human h1; //直接申明调用构造函数
Human h2 = Fuc(h1);//使用返回对象构造,使用拷贝构造
像上面这段代码,num在构造时候+1,在拷贝构造时没有+1,但是由于使用拷贝构造生成的对象也是会调用析构函数,会造成num多减2次。使得num变为负数。
还有几道算法的题目。先是怎么判断一个单链表有没有环。这道题目上次做过,使用标记位即可。但是这次不让用标价位,要使用2个指针。
网上的说法是用2个指针,一个快,一个慢的,慢的每次走一格,快的每次走2格。如快慢指针能够相遇则表示有环,否则没有。
还问了道题目。让我将一个数组逆置。我居然说是用个临时数组先倒过来存放一遍,再存到原来那个数组里,真是笨死了。
应该用2分法的。发觉写个这么简单的函数我也要写半天,太费了
明天要去盛大面了,加油。