鱼C论坛

 找回密码
 立即注册
查看: 1003|回复: 7

[已解决]函数头部指针占用的字节问题

[复制链接]
发表于 2021-1-28 20:18:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
#include<string>

int main()
{
    std::string a{ "C:\\Windows\\System32" };
    std::cout << sizeof(a)<<std::endl;
    std::cout << a.length();
}

输出结果是sizeof:28,length:19
sizeof求的是整个函数的大小,length求的是内容的大小,函数尾部返回需要1个字节,但是为什么函数头部需要8个字节,指针不应该都是4个字节的吗??求解!!!!!!!!!!!!!!!!!!!!!!!!!!!
最佳答案
2021-1-29 00:40:24
不是代码。一个类,里面有成员变量,就是成员变量占的空间。你可以把类当成一个结构体来看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-28 21:10:37 | 显示全部楼层
a 不是函数,a 是一个变量,类型是 string
sizeof(a) 是求a 这个变量所占的内存空间 sizeof(a) 其实 等于 sizeof(std::string)
这个所占空间大小跟操作系统和c++版本有关。
你的占28字节 估计是64位系统。

a.length()求的是字符串 C:\Windows\System32 的长度,这个字符串长 19 个字节,没有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-28 21:51:37 | 显示全部楼层
xieglt 发表于 2021-1-28 21:10
a 不是函数,a 是一个变量,类型是 string
sizeof(a) 是求a 这个变量所占的内存空间 sizeof(a) 其实 等于 ...

也就是说sizeof求得是代码占用的字节?而length求得是内容占的字节?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-28 21:52:11 | 显示全部楼层
xieglt 发表于 2021-1-28 21:10
a 不是函数,a 是一个变量,类型是 string
sizeof(a) 是求a 这个变量所占的内存空间 sizeof(a) 其实 等于 ...

感觉有点像虚函数啊,不过还没学到哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 00:40:24 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
不是代码。一个类,里面有成员变量,就是成员变量占的空间。你可以把类当成一个结构体来看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 11:44:38 | 显示全部楼层
首先sizeof(a)返回的是 "a的类型所占的内存空间大小" 所以这里返回的是"String类型"的大小.  不管"a"到底实际用了多少内存,  "a的类型" 所占的内存都是不变的. 你可以尝试一直给 a+= "x" , 就会发现length不断增加但是sizeof的值一直是28
#include <iostream>
#include<string>

int main()
{
        std::string a{ "C:\\Windows\\System32" };
        std::cout << sizeof(a) << std::endl;
        std::cout << a.length() << std::endl;
        std::string b;
        std::cout << sizeof(b) << std::endl;

        while (1) {
                system("pause");
                a += "x";
                std::cout << sizeof(a) << std::endl;
                std::cout << a.length() << std::endl;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-29 12:20:14 | 显示全部楼层
xieglt 发表于 2021-1-29 00:40
不是代码。一个类,里面有成员变量,就是成员变量占的空间。你可以把类当成一个结构体来看。

懂了,感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-29 12:20:48 | 显示全部楼层
kishere 发表于 2021-1-29 11:44
首先sizeof(a)返回的是 "a的类型所占的内存空间大小" 所以这里返回的是"String类型"的大小.  不管"a"到底实 ...

懂了,感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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