关于C/C++的一些知识点整理 (5)

1. 

解析:==的优先级小于<=。

2.

解析:如果是小写的u则输出32769,大写的字母不能当作格式控制符。

3.

!!!!!没懂!!!!!!

4.

函数模板和类模板都是由编译器实例化。

类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化。

一个类定义中,只要有一个函数模板,这个类就是类模板。

5.

解析:最后一个选项#define N 2008 后面不加分号就是对的。

6.

纯虚函数的格式:virtual <类型> <函数名> (<参数表>) = 0;

例:virtual void print()=0;

声明纯虚函数的类是抽象类,不能实例化!基类被虚继承才是虚基类。

7.

首先对0长数组做一个解释:

用途 :长度为0的数组的主要用途是为了满足需要变长度的结构体。

用法 :在一个结构体的最后 ,申明一个长度为0的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们可以进行动态分配.

8.

        数组名是数组这种类型的变量名,所以对数组名取地址是取的整个数组的地址,所以&a+1自然要跨过整个数组的长度,本题即跨过2*5 = 10个int的长度。

       有了上述概念,再来分析这道题,int *ptr = (int *)(&a+1),p此时指向的地址应该是a[1][4]后面的地址,由于ptr是int型指针,ptr-3应该是ptr向前移动3个元素,即ptr-3指向a[1][2],所以*(ptr -3) = 9。

猜你喜欢

转载自blog.csdn.net/mmmmmmyy/article/details/81234072