1、C 和 C++ 有什么区别?
- C++ 是面向对象的语言,而 C 是面向过程的语言;
- C++ 引入 new/delete 运算符,取代了 C 中的 malloc/free 库函数;
- C++ 引用的概念,而 C 中没有;
- C++ 引入类的概念,而 C 中没有;
- C++ 引入函数重载的特性,而 C 中没有
2、a 和 &a 有什么区别?
假设数组 int a[10];int (*p)[10]=&a;其中:
- a是数组名,是数组首元素地址,+1 表示地址值加上一个 int 类型的大小,如果 a 的值是0x00000001,加 1 操作后变为 0x00000005。 *(a+1)=a[1]。
- &a 是数组的指针,其类型为 int(*)[10](就是前面提到的数组指针),其加 1 时,系统会认为是数组首地址加上整个数组的偏移(10个 int 型变量),值为数组 a 尾元素后一个元素的地址。
- 若(int*)p,此时输出 *p时,其值为 a[0] 的值,因为被转为 int* 类型,解引用时按照 int 类型大小来读取。
3、static 关键字有什么作用?
- 修饰局部变量时,使得该变量在静态存储区分配内存;只能在首次函数调用中进行首次初始化,之后的函数调用不再进行初始化;其生命周期与程序相同,但其作用域为局部作用域,并不能一直被访问;
- 修饰全局变量时,使得该变量在静态存储区分配内存;在声明该变量的整个文件中都是可见的,而在文件外是不可见的;
- 修饰函数时,在声明该函数的整个文件中都是可见的,而在文件外是不可见的,从而可以在多人协作时避免同名的函数冲突;
- 修饰成员变量时,所有的对象都只维持一份拷贝,可以实现不同对象间的数据共享;不需要实例化对象即可访问;不能在类内部初始化,一般在类外部初始化,并且初始化时不加 static ;
- 修饰成员函数时,该函数不接受 this 指针,只能访问类的静态成员;不需要实例化对象即可访问。
|