【问题标题】:Why does a char seem to take more space in an array than by itself为什么 char 在数组中似乎比其本身占用更多空间
【发布时间】:2016-07-20 06:08:31
【问题描述】:
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 个字节,因为这将是分隔它们的数据的大小。为什么不是这样?

【问题讨论】:

  • 你正在获取指针的地址。

标签: c++ pointers char memory-address


【解决方案1】:

&amp;pointerToFirstChar&amp;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* 以打印出地址而不是字符串。

【讨论】:

  • @downvoter:请告诉我我哪里错了,以便我改进。
【解决方案2】:

您正在查看 指针 pointerToFirstCharpointerToSecondChar 的地址。它们是指向 char 的指针;比较它们的,它们会相差 1。您似乎已经在文本中编辑了它。

【讨论】:

    【解决方案3】:

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

    例如:

    &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;

    更多信息请点击以下链接 print address of array of char

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2014-10-31
      • 2017-11-02
      • 2016-11-13
      • 2018-08-12
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多