【发布时间】:2019-03-20 06:17:17
【问题描述】:
在主类中我打印 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 ;
}
【问题讨论】:
-
person->name是什么类型?
-
你漏掉了
Person::name的类型,但我猜是std::string,你可以通过比较你的数字和sizeof(std::string)和sizeof(char[6])来找到提示。 -
字符串类型
-
请注意,由于您在
name中遗漏了零终止符,因此从中创建std::string具有未定义的行为。 -
sizeofastring和string的字符长度之间没有关系。sizeof仅提供类型的字节大小。在最基本的情况下,string是一个指向缓冲区的指针,该缓冲区包含字符和字符数的计数,无论string拥有和引用多少个字符,大小可能为 8 到 16 个字节。请改用string::size或string::length。