簡體   English   中英

為什么在對同一個字符數組使用 sizeof 時會得到不同的結果?

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

在主類中,我打印 sizeof(person->name) 然后我做 sizeof(name) 這與我將相同的 char 數組傳遞給 Person 構造函數相同。 但是為什么我在這兩種情況下都得到了不同的結果
在第一種情況下 sizeof 返回 32 而在第二種情況下 sizeof 返回 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::stringchar name[]相比確實有開銷,並且該開銷(取決於實現)最多約為 20 個字節。

對於 0 - ~20 個字符的范圍, std::string將始終占用 ~20 字節內存。 對於超過約 20 個字符, std::string將占用約 20 + 字符字節數。

所以是的,對於非常少的字符,它可以是 5 倍多的字節。 但是對於正常用例,可以忽略該開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM