c++ 常见笔试题

一.const修饰指针

const修饰指针有三种情况:

1.const修饰指针---常量指针     

const int * p=&a        const使得 *p不能改变

指针的指向可以修改  指针指向的值不可修改

2.const修饰常量---指针常量     

int * const p=&a        const使得 p不能改变

指针的指向不可以修改 指针指向的值可修改

3.const既修饰指针又修饰常量

均不可修改

二.static关键字

1.对于其他文件 隐藏全局函数和变量

所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。

const char a = 'A'; // global variable
const void msg()
{
     printf("Hello\n");
}
 

全局函数  变量   有static前缀后无法被其他文件访问


如果加了static,就会对其它源文件隐藏。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.

2.将局部变量改变为全局变量,且无法再次被初始化

int fun(){
    static int count = 10; //在第一次进入这个函数的时候,
变量a被初始化为10!以后每次进入该函数,a就不会被再次初始化了
 return count--;   } 

int count = 1;//无效代码

3.static修饰的变量默认初始化为0

4.c++中的类成员声明static

在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员

(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。      

(2)不能将静态成员函数定义为虚函数。      

(3)静态数据成员是静态存储的,所以必须对它进行初始化。 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误) 

(4)静态成员初始化与一般数据成员初始化不同:

初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
初始化时不加该成员的访问权限控制符private,public等;        
初始化时使用作用域运算符来标明它所属类;
           所以我们得出静态数据成员初始化的格式:
<数据类型><类名>::<静态数据成员名>=<值>         

int Person::num=250

(5)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志。

三.指针与引用的区别

引用和指针有什么区别?

本质:引用是别名,指针是地址,具体的:

①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。


②从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。

 

 

③ 从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针


④不存在指向空值的引用这个事实,意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。


⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
  int** p1;         // 合法。指向指针的指针
  int*& p2;         // 合法。指向指针的引用
  int&* p3;         // 非法。指向引用的指针是非法的

四、new与malloc的区别

1.malloc与free是c/c++的标准函数,new/delete是c++运算符

2.new可以自动化分析数据大小,自动执行构造函数、析构函数,malloc必须指定大小sizeof(int)

posted @ 2021-06-20 22:15  白米a  阅读(651)  评论(0)    收藏  举报