常见指针定义解读
最近做的C/C++技术面试比较多,发现了一些共同的问题,对于如下所示的指针认识,多数面试者都答错了,作为过来人,这种情况还可以理解的,放在一起确实有些复杂。
int *p;
int *p[8];
int (*p)[8];
int (*p)();
为了能朴素的理解,加上注释说明,这下是不是可以非常轻松明白的掌握了?
int *p; // p为指向int值的指针,也可以说是指向一维数组的指针,假如有一个一维数组:int m[8],则可:p = m;
int *p[8]; // p为一个一维数组,数组元素为int*类型,它和数组int p[8]都是同一类型,只不过一个元素类型为int*,一个是int
int (*p)[8]; // p为一个指向二维数据的指针,数组元素为int类型,假如有二维数据:int m[1][8],则可:p = m;
int (*p)(); // p为一个指向函数的指针,假设有一个函数:int foo(),则可:p = foo;
下面两个了?
int (**pa)[8];
int (**pb)();
不用怕,只是多了个*,也就是指向指针的指针。假设有:int m[1][8]; int (*p)[8] = m;,则:pa = &p。
除此之外,仍然有很多人搞不明白构造和析构的次顺,不建议去背,带理性去思考,顺序错了,可是要出大问题的,比如子类构造中可以使用父类的成员,那么必须父类要构造在前。
int *p;
int *p[8];
int (*p)[8];
int (*p)();
为了能朴素的理解,加上注释说明,这下是不是可以非常轻松明白的掌握了?
int *p; // p为指向int值的指针,也可以说是指向一维数组的指针,假如有一个一维数组:int m[8],则可:p = m;
int *p[8]; // p为一个一维数组,数组元素为int*类型,它和数组int p[8]都是同一类型,只不过一个元素类型为int*,一个是int
int (*p)[8]; // p为一个指向二维数据的指针,数组元素为int类型,假如有二维数据:int m[1][8],则可:p = m;
int (*p)(); // p为一个指向函数的指针,假设有一个函数:int foo(),则可:p = foo;
下面两个了?
int (**pa)[8];
int (**pb)();
不用怕,只是多了个*,也就是指向指针的指针。假设有:int m[1][8]; int (*p)[8] = m;,则:pa = &p。
除此之外,仍然有很多人搞不明白构造和析构的次顺,不建议去背,带理性去思考,顺序错了,可是要出大问题的,比如子类构造中可以使用父类的成员,那么必须父类要构造在前。