一个数据对象的内存地址称为该数据对象的指针。
指针与引用的区别:
1、非空区别。在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象,而指针可以指向空值。不存在指向空值的引用这个事实意味着使用引用的代码效率比指针高。
2、合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,以防止其为空。
3、可修改区别。指针可以被重新赋值以指向另一个不同的对象,而引用总是指向其被初始化的对象。
4、应用区别。当所指对象可变或有可能为空时则选择指针,当所指对象不为空且始终指向初始化时的对象时,应选择引用。
错误:
int *p;
*p=5;
这是错误的,整数p并没有指向实际的地址。在这种情况下对其赋值是错误的,因为赋的值不知道该放到哪里去。
例:
int a,b;
int *pa,*pb=&b;
pa=&a;
int a[10];
int *ptr=a;
空指针:
void 指针一般只在指针所指向的数据类型不确定时使用。
例:
void *pv;
int i=5;
pv=&i;//void 类型指针指向整型变量
int *pint=static_cast<int *>(pv);//void 类型指针赋值给int型指针
this指针的特点:
1、this指针只能在成员函数中使用,全局函数和静态函数中都不能使用this指针。
2.this在成员函数的开始前构造,在成员函数的结束后清除。
C++中类和结构只有一个区别:
类的成员默认是private的,而结构式public的。
每个类编译后是否创建一个类中函数表来保存函数指针,以便用来调用函数?
普通的类函数,(无论是成员函数,还是静态函数)都不会创建一个函数表来保存函数指针。只有虚函数才会被放到函数表中。但是即使是虚函数,如果编译器能明确知道调用的是哪个函数,编译器就不会通过函数表中的指针来间接调用,而是直接调用该函数。
多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键。