为什么数组上的 sizeof 运算符会给出不正确的结果?

时间:2021-03-04 13:57:19

标签: c++ arrays sizeof

这是我的代码。

#include <iostream>
#include<sstream>

using namespace std;

int main()
{
   ostringstream outStr;

   const char* strArray[]= {"Hi","How" ,"Howhuw","bdeuvc"};
   int n;
   cout << sizeof(strArray);
}

为什么我得到输出 32?有人可以向我解释一下吗?我知道我这里有一个包含 4 个元素的数组,但它的大小是 32 吗?

2 个答案:

答案 0 :(得分:2)

Sizeof 返回以字节为单位的大小。

char x = 'a';
cout << sizeof(x); // this would be 1

这意味着整个数组的大小为 32 字节

int 在大多数现代机器上是 32 位(4 字节)

如果你有,让我们说 int array[] = { 1, 2, 3, 4, 5 } 并且您想获得其元素的数量,您可以执行以下操作:

cout << sizeof(array)/sizeof(int); // (20 / 4) -> 5



编辑:

您在此处声明的内容:

const char* strArray[]= {"Hi","How" ,"Howhuw","bdeuvc"};

这是一个包含 4 个 char*(字符指针)的数组。您机器上的字符指针大小为 8 个字节。

char* x = "a";
cout << sizeof(x);

指针是一个变量(你可以把它想象成一个整数),它在内存中保存它所指向的变量开始的地址:

strArray[0] 指向“Hi”开始的内存地址。
strArray[1] 指向“How”开始的内存地址。
...等等

答案 1 :(得分:-1)

字符数组中 " " 内的每个字符数组都消耗 8 bytes,这就是为什么您将输出为 32 bytes 如果在其中再添加一个字符串,它将显示 {{ 1}}。

相关问题