变量声明和定义区别?
- 声明仅仅是把变量的声明的位置及类型提供给编译器,并不分配内存空间;定义要在定义的地方为其分配存储空间。
- 相同变量可以再多处声明(外部变量extern),但只能在一处定义。
"零值比较"?
- bool类型:if(flag)
- int类型:if(flag == 0)
- 指针类型:if(flag == null)
- float类型:if((flag >= -0.000001) && (flag <= 0. 000001))
strlen和sizeof区别?
- sizeof是运算符,并不是函数,结果在编译时得到而非运行中获得;strlen是字符处理的库函数。
- sizeof参数可以是任何数据的类型或者数据(sizeof参数不退化);strlen的参数只能是字符指针且结尾是'\0'的字符串。
- 因为sizeof值在编译时确定,所以不能用来得到动态分配(运行时分配)存储空间的大小。
同一不同对象可以互相赋值吗?
- 可以,但含有指针成员时需要注意。
- 对比类的对象赋值时深拷贝和浅拷贝。
结构体内存对齐问题?
- 结构体内成员按照声明顺序存储,第一个成员地址和整个结构体地址相同。
- 未特殊说明时,按结构体中size最大的成员对齐(若有double成员),按8字节对齐。
static作用是什么?在C和C++中有何区别?
- static可以修饰局部变量(静态局部变量)、全局变量(静态全局变量)和函数,被修饰的变量存储位置在静态区。对于静态局部变量,相对于一般局部变量其生命周期长,直到程序运行结束而非函数调用结束,且只在第一次被调用时定义;对于静态全局变量,相对于全局变量其可见范围被缩小,只能在本文件中可见;修饰函数时作用和修饰全局变量相同,都是为了限定访问域。
- C++的static除了上述两种用途,还可以修饰类成员(静态成员变量和静态成员函数),静态成员变量和静态成员函数不属于任何一个对象,是所有类实例所共有。
- static的数据记忆性可以满足函数在不同调用期的通信,也可以满足同一个类的多个实例间的通信。
- 未初始化时,static变量默认值为0。
结构体和类的区别?
- 结构体的默认限定符是public;类是private。
- 结构体不可以继承,类可以。 C++中结构体也可以继承。
malloc和new的区别?
- malloc和free是标准库函数,支持覆盖;new和delete是运算符,并且支持重载。
- malloc仅仅分配内存空间,free仅仅回收空间,不具备调用构造函数和析构函数功能,用malloc分配空间存储类的对象存在风险;new和delete除了分配回收功能外,还会调用构造函数和析构函数。
- malloc和free返回的是void类型指针(必须进行类型转换),new和delete返回的是具体类型指针。