为什么一个字符在数组中似乎比它本身占用更多的空间

Why does a char seem to take more space in an array than by itself

本文关键字:它本身 空间 一个 数组 字符 为什么      更新时间:2023-10-16
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;

该输出:

"一个字符占用1个字节">

"…地址:00F3F718">

"…地址: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*以打印出地址而不是字符串。

您正在查看指针pointerToFirstCharpointerToSecondChar的地址。它们是指向char的指针;比较它们的,它们将相差1。你似乎把它删掉了。

您打印的是指针变量的地址,而不是当前指针所在的地址。

例如:

&myCharString[0] = 0xFE20  
&myCharString[1] = 0xFE21  
&myCharString[2] = 0xFE23  
char *pointerToFirstChar = &(myCharString[0]);

pointerToFirstChar的地址=0xF8C2,并且它保存地址&myCharString[0]=0xFE20

所以您正在打印,0xF8C2而不是打印0xFE20

按照如下方式更新代码以获得正确的结果。

cout << "Value was " << pointerToFirstChar << ", address: " << (void *)&pointerToFirstChar[0] << endl; cout << "Value 2 was " << pointerToSecondChar << ", address:" << (void *)&pointerToSecondChar[0] << endl;

欲了解更多信息,请点击以下链接字符数组的打印地址

相关文章: