指针和引用

来源:互联网 发布:数据精灵ios破解版 编辑:程序博客网 时间:2024/06/05 20:31

##########程序员面试宝典############

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;//输出2return 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()函数的代码了,因此输出的结果还是1p->fun(); //而p->fun()指针是基类指针,指向的fun是一个虚函数,由于每个虚函数都有一个虚函数列表,               //此时p调用fun()并不是直接调用函数,而是通过虚函数列表找到相应的函数的地址,因此根据指向的对象不同,函数地址也将不同,               //这里将找到对应的子类的fun()函数的地址,因此输出的结果也会是子类的结果4。return 0;}


0 0
原创粉丝点击