指针杂谈

来源:互联网 发布:淘宝店没生意怎么办 编辑:程序博客网 时间:2024/06/05 11:49
#include<cstdio>//http://blog.csdn.net/solomon1558/article/details/40798901//http://www.360doc.com/content/12/0403/11/9140140_200442978.shtmldouble 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/22220777struct 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;//去掉这句就不停吃内存 }}


原创粉丝点击