指针杂谈

#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;//去掉这句就不停吃内存 
	}
}


posted @ 2017-07-25 12:00  hehe_54321  阅读(128)  评论(0编辑  收藏  举报
AmazingCounters.com