【问题标题】:Why does sizeof operator on an array give incorrect result? [duplicate]为什么数组上的 sizeof 运算符会给出不正确的结果? [复制]
【发布时间】:2021-03-04 13:57:19
【问题描述】:

这是我的代码。

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

【问题讨论】:

  • fwiw, std::vector&lt;std::string&gt; 适合初学者,c-array 复杂且容易出错(在大多数情况下没有太多好处)
  • @AshRay 你能不能提供一个比“谁能解释我。我是 C++ 初学者”更好的标题
  • sizeof(strArray)4 * sizeof (const char*)(4 因为你的数组包含 4 个元素)
  • A char 是一个字节。 char* 取决于指针的大小,但如果您的程序是 64 位,则可能是 8 个字节,如果您的程序是 32 位,则可能是 4 个字节。

标签: c++ arrays sizeof


【解决方案1】:

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

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

这意味着字符数组占用的空间是它们的个数 * 1 字节

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] 指向“如何”开始的内存地址。
...等等

【讨论】:

  • 没问题!您可以将其标记为最佳答案,以便其他人能够轻松找到它;)
  • 请注意,不需要使用sizeof 咒语。为此,标准中有一个模板函数:std::size
  • 当然,我只是给出了sizeof的用法示例
  • 这个答案似乎与问题没有直接关系。 OP 有 char* 数组,而不是整数。
  • 我刚刚更新了
【解决方案2】:

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

【讨论】:

  • sizeof() 以字节或位返回。另一个答案说它以字节返回???
  • 我想你的意思是 bytes 不是比特?
  • @AshRay: sizeof 以字节为单位返回:sizeof(char)==1, sizeof(const char*)==8 在您的平台中(其他配置的数字可能不同)。
  • 是的@AshRay,它是字节。对不起,我的错。
  • 数组中没有字符串。
猜你喜欢
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多