##########程序员面试宝典############
1 在子函数中分配内存
void GetMemory(char **p,int num)
{
*p=(char*)malloc(sizeof(char)*num);
}//用指针参数去申请内存,那么应该采用指向指针的指针,传str的地址给函数GetMemory。
char *GetMemory2(char *p,int num)
{
p=(char*)malloc(sizeof(char)*num);
return p;
}//用函数返回值来传递动态内存
2 指针与地址的关系
int main()
{
int a[3];a[0]=0;a[1]=1;a[2]=2;
int *p,*q;p=a;q=&a[2];
cout<<p<<endl;
cout<<*p<<endl;
cout<<q<<endl;
cout<<*q<<endl;
cout<<a[q-p]<<endl;//指针操作确实是对数据类型为单位的加减
cout<<a[*q-*p]<<endl;//输出2
return 0;
}
3 C++的多态
class A
{
public:
void foo()
{
printf("1\n");
}
virtual void fun()
{
printf("2\n");
}
};
class B : public A
{
public:
void foo()
{
printf("3\n");
}
void fun()
{
printf("4\n");
}
};
int main(void)
{
A a;
B b;
A *p = &a;
p->foo(); // 第一个p->foo()和p->fuu()都很好理解,本身是基类指针,指向的又是基类对象,
p->fun();//调用的都是基类本身的函数,因此输出结果就是1、2。
p = &b;
p->foo();//p->foo()由于指针是个基类指针,指向是一个固定偏移量的函数,
//因此此时指向的就只能是基类的foo()函数的代码了,因此输出的结果还是1
p->fun(); //而p->fun()指针是基类指针,指向的fun是一个虚函数,由于每个虚函数都有一个虚函数列表,
//此时p调用fun()并不是直接调用函数,而是通过虚函数列表找到相应的函数的地址,因此根据指向的对象不同,函数地址也将不同,
//这里将找到对应的子类的fun()函数的地址,因此输出的结果也会是子类的结果4。
return 0;
}