字符串指针操作

    char s[]="abc";
    char *ptr="abc";
    cout<<"s  "<// abc
    cout<<"*s  "<<*s<// a
    cout<<"&s  "<<&s<// 0x61ff1c
    cout<<"s+1  "<<(s+1)<// bc
    cout<<"*(s+1)  "<<*(s+1)<// b
    cout<<"&s[0]  "<<&s[0]<// abc
    cout<<"&s[0]  "<<(void*)(&s[0])<//0x61ff1c
    cout<<"&s[0]  "<<static_cast<const void*>(&s[0])<//0x61ff1c
    printf("%p\n",&s[0]);                 //0061FF1C
    cout<<"s[1]  "<1]<// b
    cout<// abc
    cout<<*ptr<// a
    cout<<&ptr<// 地址
    cout<<(ptr+1)<// bc
    cout<<*(ptr+1)<// b
    cout<<&ptr[1]<// bc
    printf("%p\n",&ptr[1]);      //地址
    cout<1]<//b

注:由于C++标准库中I/O类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串。既然这样,那么我们就别让它知道那是字符型指针,所以得用到强制类型转换,不过不是C的那套,我们得用static_cast来实现,把字符串指针转换成无类型指针,这样更规范

你可能感兴趣的:(Tips)