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