为什么在使用SizeOf进行同一char阵列时会得到各种结果
Why I am getting varied results when using sizeof for same char array?
在主级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倍。但是对于普通用例,可以忽略开销。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- OpenMP阵列性能较差
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 当我的阵列太大时出现分段错误
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 简单的程序比较阵列运行但给出不正确的结果
- 即使在C 中越过初始化阵列的极限后,结果也是如此
- 为什么在使用SizeOf进行同一char阵列时会得到各种结果
- 多功能阵列最后一行相同的结果
- 如何通过可行的方法汇总浮点阵列并获得精确的结果