char s[]="abc";
char *ptr="abc";
cout<<"s "<<s<<endl; // abc
cout<<"*s "<<*s<<endl; // a
cout<<"&s "<<&s<<endl; // 0x61ff1c
cout<<"s+1 "<<(s+1)<<endl; // bc
cout<<"*(s+1) "<<*(s+1)<<endl; // b
cout<<"&s[0] "<<&s[0]<<endl; // abc
cout<<"&s[0] "<<(void*)(&s[0])<<endl;//0x61ff1c
cout<<"&s[0] "<<static_cast<const void*>(&s[0])<<endl;//0x61ff1c
printf("%p\n",&s[0]); //0061FF1C
cout<<"s[1] "<<s[1]<<endl<<endl; // b
cout<<ptr<<endl; // abc
cout<<*ptr<<endl; // a
cout<<&ptr<<endl; // 地址
cout<<(ptr+1)<<endl; // bc
cout<<*(ptr+1)<<endl; // b
cout<<&ptr[1]<<endl; // bc
printf("%p\n",&ptr[1]); //地址
cout<<ptr[1]<<endl; //b
注:由于C++标准库中I/O类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串
。既然这样,那么我们就别让它知道那是字符型指针,所以得用到强制类型转换,不过不是C的那套,我们得用static_cast来实现,把字符串指针转换成无类型指针,这样更规范