为什么在使用SizeOf进行同一char阵列时会得到各种结果

Why I am getting varied results when using sizeof for same char array?

本文关键字:阵列 结果 char SizeOf 为什么      更新时间:2023-10-16

在主级I print sizeof(person-> name)中,然后我做sizeof(name),当我将同一个字符阵列传递给人构造器时。但是,为什么我在两种情况下都会获得不同的结果
在第一个情况下,大小返回32而在第二个案例中,大小返回6这是输出

这是代码: -

#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 ;   
}

std::string中的 sizeof不能测量字符串所占据的完整内存量。它衡量std::string对象的大小。

std::string上的sizeof是一个常数值,它在存储在其中的字符串长度上是独立的。

由于元信息和小字符串优化,std::string确实具有与char name[]相比的间接费用,并且该开销的最大约为20个字节。

对于0-〜20个字符的范围,std::string始终将占据〜20 bytes内存。对于〜20个字符,std::string将占据〜20 char字节数。

是的,对于非常少量的字符,它的字节可能多5倍。但是对于普通用例,可以忽略开销。