c/c++ 面试笔试知识点----牛客网(1)

来源:互联网 发布:吉他软件手机版 编辑:程序博客网 时间:2024/05/22 02:26

我最近在牛客网上做题目,每道题目都有一些小的知识点,我把它总结下来,给大家分享,希望给面试笔试的人一些帮助。有些知识点太多了,所以只写了知识点。希望大家多多指出,共同进步,拿到一份好的offer。


1. 

int(*n)[10]; 是数组指针  sizeof(n)=4

int* n[10];  是指针数组  sizeof(n)=40

2.  

class B

{

    char ch;

    int x;

};sizeof(8) 默认4字节对齐

Class B

{

Int x;

Char ch;

Char ch;

Int y;

};

Sizeof(12) 两个合并为一个

3. 

函数的定义不能嵌套,但函数调用可以嵌套

4. FILE *f = fopen( "test.bin", "wb" );2进制打开一个文件

5. 

所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。错误的,友元可以

6. 

在类外定义派生类的构造函数的一般形式有两种为:

1)   <派生类名>::<派生类名>(参数总表):基类名(参数表),对象名1(参数表1),对象名2(参数表2),...对象名n(参数表n)

{

    初始化语句;

}

2)也可以有另一种形式,那就是像本题中的,写成成员列表初始化的形式,也就是将(1)中构造函数体内的初始化语句搬到冒号后面去:

<派生类名>::<派生类名>(参数总表):基类名(参数表),对象名1(参数表1),对象名2(参数表2),...对象名n(参数表n),派生类中的成员(参数表){ }

7. 

类的静态成员属于整个类 而不是某个对象,可以被类的所有方法访问,子类当然可以父类静态成员;
静态方法属于整个类,在对象创建之前就已经分配空间,类的非静态成员要在对象创建后才有内存,所有静态方法只能访问静态成员,不能访问非静态成员;
静态成员可以被任一对象修改,修改后的值可以被所有对象共享。

8. 

c++中为了尽量保证精度不丢失,一般会把低转化为高精度,比如char->int->float->double

(I)i==(int)(float)I   由于i(int)经过强制类型转换从int->float->int和左边相同  正确

(II)f==(float)(int)f    由于f(float)经过强制类型转换 从float->int,虽然int也强制类型转换了但是小数点已经去掉,故精度丢失,和左边不一样,错误

(III)f==(float)(double) f      由于f(float)经过强制类型转换 从float->double->float和左边相同   正确 

(IV)(d+f)-d==f  左边为了尽量保证精度不丢失,一般会把低转化为高精度从float->double 和右边float不同  错误

9. 

一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序基类-成员对象-自己的

10. 

以下哪些做法是不正确或者应该极力避免的构造函数声明为虚函数 构造函数中调用虚函数 析构函数中调用虚函数

11. 

private 属性不能够被继承。

使用private继承,父类的protected和public属性在子类中变为private;

使用protected继承,父类的protected和public属性在子类中变为protected;

使用public继承,父类中的protected和public属性不发生改变; 

private, public, protected 访问标号的访问范围: 

private:只能由1.该类中的函数、2.其友元函数访问。

不能被任何其他访问,该类的对象也不能访问。

protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。

但不能被该类的对象访问。

public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。

12. 

非法指针并不只是未分配的内存,而包括所有已经不能访问的内存,例如,指向已经返回的函数局部变量,越过数组边界的地址等。

两个同类型指针相减有意义,这就是求差,但相加没有意义。

比如,两个数组元素一一对应,当我们已知A的X元素,而要找B中与之对应的Y时,就可以使用。

13. B + (X - A) 其中X - A就是同类型指针相减,这是有效也是唯一的作法。 

14. 

eginthreadex()比较于 CreateThread()有更高的线程安全性,不会造成多个线程共用同一个全局变量的情况

15. 

c语言程序中的整数不能是二进制整数

16. 

区别静态关联和动态关联,如果是通过对象名调用虚函数,在编译阶段就能确定调用的是哪一个类的虚函数,所以属于静态关联,如果是通过基类指针调用虚函数,属于动态关联。

17. 

32位指针大小位4个字节,64位指针大小位8个字节。空指针也是如此。

18. 

c/c++类型安全

19. 

联合体

20. 

总结一下引用和指针的区别:

  1、引用是直接访问,指针是间接访问

  2、引用是变量的别名,本身不单独分配自己的内存空间。指针有自己的内存空间。

  3、引用一旦初始化,不能再引用其他变量。而指针可以

21. 

单精度浮点数的有效位数是7位。

双精度浮点数的有效位数是16位。

22. 

指针数组:实际上是数组,其元素都是指针;如:int *p[3];

数组指针:实际是指针,指向数组。如:int *p[3]:指向数组的指针,该数组有3int型数据。[]优先级比*

23. 

构造函数初始化时必须采用初始化列表一共有三种情况,
1.需要初始化的数据成员是对象(继承时调用基类构造函数)
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据

24. 

delete 释放new分配的单个对象指针指向的内存
delete[] 释放new分配的对象数组指针指向的内存

所以,在用这些类生成对象数组的时候,用delete[]来释放它们才是王道。而用delete来释放也许不会出问题,也许后果很严重,具体要看类的代码了.

25. 

char *q=”qweewq”,是一个常量字符串指针,存放在字符串常量区,函数结束不会释放里面的内容,无法修改。若要修改只能改为char q[]=qweewq”,但是这种方式放在栈区,函数结束就会被释放。


阅读全文
1 0