指针和引用

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

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值