指针杂谈

#include<cstdio>
//http://blog.csdn.net/solomon1558/article/details/40798901
//http://www.360doc.com/content/12/0403/11/9140140_200442978.shtml
double do1()
{
	printf("uses do1\n");
	return 122.6546564;
}
int main()
{
	double (*do2)()=do1;//函数指针
	int (*do3)()=(int(*) ())do1;//强制类型转换函数指针
	printf("1 %f\n",do2());//printf("%f\n",(*do2)());也可以,正常的输出函数返回值
	printf("2 %d\n",do2);//正常的方式输出函数地址
	printf("3 %f\n",do2);//奇怪的方式输出函数地址
	printf("4 %f\n",do3());//(这样子强制类型转换函数指针,尽量不要用)%f的方式输出
	printf("5 %d\n",do3());//只会输出奇怪的东西
	printf("6 %f\n",do3);//用奇怪的方式输出函数的地址
	printf("7 %d\n",do3);//用正常的方式输出函数的地址
	
	int a=(int)(&do1);
	printf("a1 %d\n",*(int*)&a);
	printf("a2 %f\n",*(int*)&a);//实际上,前面好几个输出(如3)都是由于这个原因
	//就是直接读取整数a在内存中的数据且把它当成浮点数输出,而浮点数和整数存储方式不同,因此输出错误
	return 0;
}
#include<cstdio>
//http://blog.csdn.net/stpeace/article/details/22220777
struct A
{
	int p;
	A& f(int x)
	{
		p=x;
		return *this; 
	}
};
struct B
{
	int p;
	B *f(int x)
	{
		p=x;
		return this; 
	}
};
int main()
{
	A *a=new A;
	a->f(3).f(5).f(25);
	printf("1 %d\n",a->p);
	delete a;
	A b;
	b.f(3).f(4).f(6);
	printf("2 %d\n",b.p);
	B c;
	c.f(3)->f(4)->f(24);
	printf("3 %d\n",c.p);
	B *d=new B;
	d->f(5)->f(7)->f(9);
	printf("4 %d\n",d->p);
	delete d;
	printf("1a %d\n",a->p);
}
#include<cstdio>
struct A
{
	int p;
	A& f(int x)
	{
		p=x;
		return *this; 
	}
};
int main()
{
	while(true)
	{
		A *a=new A;
		delete a;//去掉这句就不停吃内存 
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值