c++ - 为什么 char 在数组中占用的空间似乎比它本身占用的空间更多

标签 c++ pointers char memory-address

char testChar = 'a';
char myCharString[] = "asd";
char *pointerToFirstChar = &(myCharString[0]);
char *pointerToSecondChar = &(myCharString[1]);
cout << "A char takes " << sizeof(testChar) << " byte(s)";
cout << "Value was " << pointerToFirstChar << ", address: " << &pointerToFirstChar << endl;
cout << "Value 2 was " << pointerToSecondChar << ", address:" << &pointerToSecondChar << endl;

这个输出:

"A char takes 1 byte"

"... address: 00F3F718"

"... address: 00F3F70C",

我认为地址之间的差异应该是 1 个字节,因为那将是分隔它们的数据的大小。为什么不是这样?

最佳答案

&pointerToFirstChar&pointerToSecondChar,你获取的不是 char 数组元素的地址,而是局部变量的地址pointerToFirstCharpointerToSecondChar。请注意,它们本身就是指针。

你可能想要:

cout << "Value was " << pointerToFirstChar << ", address: " << static_cast<void*>(pointerToFirstChar) << endl;
cout << "Value 2 was " << pointerToSecondChar << ", address:" << static_cast<void*>(pointerToSecondChar) << endl;

请注意,您需要将它们转换为 void* 以打印出地址而不是字符串。

关于c++ - 为什么 char 在数组中占用的空间似乎比它本身占用的空间更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473494/

相关文章:

c++ - 此 C++ 堆栈分配器的改进?

pointers - C++ 11-一直使用nullptr吗?

c - 在 Xcode 6.1 中获取预期标识符或 '(' 问题

visual-c++ - 全局静态指针问题

c# - 将 char[,] 数组转换为 char**

c++ - MFC如何让ctreectrl虚化?

c++ - 如何判断任何 map 由哪些类型组成

c++ - 将字符串复制到 char 数组

c++ - C++ 中奇怪的标准输出行为

c++ - 在 C++ 中将变量 wstring 分配给 Char 数组