欢迎来到天天文库
浏览记录
ID:46579316
大小:112.37 KB
页数:15页
时间:2019-11-25
《C++指针经典应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、指针经典应用:1.#includeintmain(void){charstr[]="helloworld";for(inti=0;iusingnamespacestd;intmain(){char*str[]={"
2、welcome","to","Fortemedia","Nanjing"};char**p=str+1;str[0]=(*p++)+2;str[1]=*(p+1);str[2]=p[1]+3;str[3]=p[0]+(str[2]‐str[1]);cout<3、r**变量的值。char**p=str+1;str指向的类型是char*型的,所以p的值是(int)str+sizeof(char*),显然p指向了str的第二个元素即str[1]的地址。(*p++)+2;,p的值变为(int)p+sizeof(char*),,显然此时p指向了str[2]的地址,再进行*运算,由于后置是++返回未变化的p的值,取到了str[1]的值,即指向字符串"to"的指针的值,由于*p类型是char*的所以](*p++)+2;最终str[0]指向了“to”结尾的'/0'所以输出str[0]时为空。st4、r[1]=*(p+1);,显然str[1]指向了字符串"Nanjing"的首地址。cout<usingnamespacestd;intmain(){inti[2]={1073741824,‐1075、3741824};int*p1=&i[0];char*p2=(char*)&i[0];float*p3=(float*)&i[0];cout<<*p1<<''<<*p2<<''<<*p3<6、*提领p1所指向的内存里的数据时,由于p1是int*型的,所以会从地址值为&i[0]开始,往下涵盖四个字节(sizeof(int))的内存,然后把里面的数据安照int变量的存储方式解析成一个int型数值。1073741824在内存&i[0]~&i[0]+3中存储是0x00,0x00,0x00,0x40,(小段机补码存储),所以*p1的值是1073741824。而p2是char*型的,所以仅从地址值为&i[0](sizeof(char))的内存把里面的数据按照char变量的存储方式解析成一个char型数值,由于地址值为&[i7、]的内存里是0x00,所以*p2为0.同样由于p3是float*型的,所以会从地址值为&i[0]开始,往下涵盖四个字节(sizeof(float))的内存,然后把里面的数据安照float变量的存储方式解析成一个float型数值。由于float型变量的存储方式不同于整型,c/c++浮点数存储遵循ieee标准,按照标准*p3的值为2.0(具体请参见本博客里一篇关于float内存布局的博文,不再赘述)。另外从上述代码我们可以看到,指针变量的类型还影响着指针变量算术运算时的跨度,即指针变量+1时,指针变量的值会增加sizeof(指8、针所指向变量的类型)。*/4.#includeusingnamespacestd;voidarrayTest(charstr[]){cout<
3、r**变量的值。char**p=str+1;str指向的类型是char*型的,所以p的值是(int)str+sizeof(char*),显然p指向了str的第二个元素即str[1]的地址。(*p++)+2;,p的值变为(int)p+sizeof(char*),,显然此时p指向了str[2]的地址,再进行*运算,由于后置是++返回未变化的p的值,取到了str[1]的值,即指向字符串"to"的指针的值,由于*p类型是char*的所以](*p++)+2;最终str[0]指向了“to”结尾的'/0'所以输出str[0]时为空。st
4、r[1]=*(p+1);,显然str[1]指向了字符串"Nanjing"的首地址。cout<usingnamespacestd;intmain(){inti[2]={1073741824,‐107
5、3741824};int*p1=&i[0];char*p2=(char*)&i[0];float*p3=(float*)&i[0];cout<<*p1<<''<<*p2<<''<<*p3<6、*提领p1所指向的内存里的数据时,由于p1是int*型的,所以会从地址值为&i[0]开始,往下涵盖四个字节(sizeof(int))的内存,然后把里面的数据安照int变量的存储方式解析成一个int型数值。1073741824在内存&i[0]~&i[0]+3中存储是0x00,0x00,0x00,0x40,(小段机补码存储),所以*p1的值是1073741824。而p2是char*型的,所以仅从地址值为&i[0](sizeof(char))的内存把里面的数据按照char变量的存储方式解析成一个char型数值,由于地址值为&[i7、]的内存里是0x00,所以*p2为0.同样由于p3是float*型的,所以会从地址值为&i[0]开始,往下涵盖四个字节(sizeof(float))的内存,然后把里面的数据安照float变量的存储方式解析成一个float型数值。由于float型变量的存储方式不同于整型,c/c++浮点数存储遵循ieee标准,按照标准*p3的值为2.0(具体请参见本博客里一篇关于float内存布局的博文,不再赘述)。另外从上述代码我们可以看到,指针变量的类型还影响着指针变量算术运算时的跨度,即指针变量+1时,指针变量的值会增加sizeof(指8、针所指向变量的类型)。*/4.#includeusingnamespacestd;voidarrayTest(charstr[]){cout<
6、*提领p1所指向的内存里的数据时,由于p1是int*型的,所以会从地址值为&i[0]开始,往下涵盖四个字节(sizeof(int))的内存,然后把里面的数据安照int变量的存储方式解析成一个int型数值。1073741824在内存&i[0]~&i[0]+3中存储是0x00,0x00,0x00,0x40,(小段机补码存储),所以*p1的值是1073741824。而p2是char*型的,所以仅从地址值为&i[0](sizeof(char))的内存把里面的数据按照char变量的存储方式解析成一个char型数值,由于地址值为&[i
7、]的内存里是0x00,所以*p2为0.同样由于p3是float*型的,所以会从地址值为&i[0]开始,往下涵盖四个字节(sizeof(float))的内存,然后把里面的数据安照float变量的存储方式解析成一个float型数值。由于float型变量的存储方式不同于整型,c/c++浮点数存储遵循ieee标准,按照标准*p3的值为2.0(具体请参见本博客里一篇关于float内存布局的博文,不再赘述)。另外从上述代码我们可以看到,指针变量的类型还影响着指针变量算术运算时的跨度,即指针变量+1时,指针变量的值会增加sizeof(指
8、针所指向变量的类型)。*/4.#includeusingnamespacestd;voidarrayTest(charstr[]){cout<
此文档下载收益归作者所有