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

Why does sizeof operator on an array give incorrect result?

这是我的代码。

#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 吗?

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

Sizeof returns 字节大小。

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

这意味着字符数组所占的space是他们的count * 1 byte

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*(字符指针)的数组。你机器上的char指针大小是8字节。

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

指针是一个变量(您可以将其视为一个整数),它在内存中保存它所指向的变量开始处的地址:

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