我最近在牛客网上做题目,每道题目都有一些小的知识点,我把它总结下来,给大家分享,希望给面试笔试的人一些帮助。有些知识点太多了,所以只写了知识点。希望大家多多指出,共同进步,拿到一份好的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]:指向数组的指针,该数组有3个int型数据。[]优先级比*高。
23.
构造函数初始化时必须采用初始化列表一共有三种情况,
1.需要初始化的数据成员是对象(继承时调用基类构造函数)
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据
24.
delete 释放new分配的单个对象指针指向的内存
delete[] 释放new分配的对象数组指针指向的内存
所以,在用这些类生成对象数组的时候,用delete[]来释放它们才是王道。而用delete来释放也许不会出问题,也许后果很严重,具体要看类的代码了.
25.
char *q=”qweewq”,是一个常量字符串指针,存放在字符串常量区,函数结束不会释放里面的内容,无法修改。若要修改只能改为 char q[]=“qweewq”,但是这种方式放在栈区,函数结束就会被释放。