鱼C论坛

 找回密码
 立即注册
查看: 670|回复: 2

[已解决]关于c++ string类的back函数

[复制链接]
发表于 2021-12-6 16:44:27 | 显示全部楼层 |阅读模式
60鱼币
刚才随手一敲的想法让我傻住了,有没有大佬帮忙解答

#include<string>
#include<iostream>
using namespace std;
int main(){
    string a = "2PI";
    cout << &a.back() - 2;
    return 0;
}

1.众所周知string类back函数返回一个引用,那如果给引用加个取地符那&a.back()是什么类型的数据呢?
2.为什么上述代码可以一次性输出2PI,改成cout << &a.back() - 1;则可以输出PI?
请求知道的大佬们随手帮我指点迷津

最佳答案
2021-12-6 16:44:28
本帖最后由 jhq999 于 2021-12-6 17:51 编辑

a.back()返回字符串里'I'这个字符的引用,取它的地址指针就是字符'I'在字符串的地址指针,所以&a.back() - 1指针位置在字符串里字符'P'的位置

最佳答案

查看完整内容

a.back()返回字符串里'I'这个字符的引用,取它的地址指针就是字符'I'在字符串的地址指针,所以&a.back() - 1指针位置在字符串里字符'P'的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-6 16:44:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2021-12-6 17:51 编辑

a.back()返回字符串里'I'这个字符的引用,取它的地址指针就是字符'I'在字符串的地址指针,所以&a.back() - 1指针位置在字符串里字符'P'的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-7 20:40:16 | 显示全部楼层
1、对引用进行取地址运算返回相对应的指针类型(例如int& --> int*)
2、std::string内部绝大部分是使用字符指针实现的,所以&a.back()相当于'I'所对应的地址,-2就是'2'对应的地址,-1就是'P'对应的地址
警告:这种行为不可取,c++标准没有规定string内部一定要是以'\0'结尾的字符指针,应当使用c_str()或者data()方法取得地址)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 05:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表