当对相同的char数组使用sizeof时,为什么会得到不同的结果?

时间:2019-03-20 06:17:18

标签: c++ c++14

在主类中,我打印sizeof(person-> name),然后我执行相同的sizeof(name) 当我将相同的char数组传递给Person构造函数时。 但是为什么在两种情况下我都得到不同的结果
在第一种情况下,sizeof返回32 而在第二种情况下,sizeof返回6 This is output

这是代码:-

#include <iostream>
#include "Person.h"

int main()
{

    char name[] = {'H','o','b','b','i','t'};
    Person *person = new Person(name , 203);

    std::cout << "p->Name size - " << sizeof(person->name) << " char array size   " << sizeof(name) << std::endl;

    delete person;

    return 0;

}
#include "Person.h"
#include <iostream>

Person::Person(){};

Person::Person(char name[],int age)
{
    this->name = name;
    this->age = age;
}

Person::~Person()
{
    std::cout << "\n Destructor called" << std::endl;
}

void Person::sayHello()
{
    std::cout << "\n Hello " << this->name << " " << this->age << std::endl ;   
}

1 个答案:

答案 0 :(得分:4)

sizeof中的

std::string不能衡量字符串占用的全部内存。它测量std::string对象的大小。

sizeof上的std::string是一个常数,与存储在其中的字符串的长度无关。

由于元信息和小的字符串优化,与std::string相比,char name[]确实有开销,并且该开销(取决于实现方式)最大约为20个字节。

对于0到〜20个字符的范围,std::string将始终占据约20个字节的内存。对于超过20个字符,std::string将占据〜20 +字符字节数。

是的,对于很少数量的字符,它可以是字节的5倍。但是对于正常的用例,这种开销可以忽略。