[英]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::string
與char name[]
相比確實有開銷,並且該開銷(取決於實現)最多約為 20 個字節。
對於 0 - ~20 個字符的范圍, std::string
將始終占用 ~20 字節內存。 對於超過約 20 個字符, std::string
將占用約 20 + 字符字節數。
所以是的,對於非常少的字符,它可以是 5 倍多的字節。 但是對於正常用例,可以忽略該開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.