问题描述
这是我的代码。
#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 吗?
解决方法
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”开始的内存地址。
...等等
字符数组中 " "
内的每个字符数组都消耗 8 bytes
,这就是为什么您将输出为 32 bytes
如果在其中再添加一个字符串,它将显示 {{ 1}}。