【问题标题】:C++ data types, their memory usage, and how pointer relate to themC++ 数据类型、它们的内存使用情况以及指针与它们的关系
【发布时间】:2021-11-13 06:30:32
【问题描述】:

如果 char 的数据类型是 1 个字节,那么指向它的 char 指针不应该也是 1 个字节吗? 为什么我的 char 指针 [8 字节] 中有多余的数据?

#include <iostream>
#include <conio.h>

using namespace std;

int main (  );
void ShowCharacter ( char *p_character );

int main (  )
  {
  char character = '\0', *p_character;
  p_character = &character;
  int size = sizeof ( p_character );

  cout << "Pass a variable 'char character' as a pointer!" << endl;

  character = getch (  );

  ShowCharacter ( p_character );
  cout << "Character (main): " << character << " (size: " << size << ")" << endl;

  return ( 0 );
  }

void ShowCharacter ( char *p_character )
  {
  char letter = p_character [ 0 ];  
// Data type Array >> sizeof ( p_character ) is 8 bytes, why is it an array and not 
// a char? 

  int size = sizeof ( p_character );

  cout << "Character (ShowCharacter): " << letter << " (size: " << size << ")\n";
// change letter to p_character to see what I mean.

return;
}

我正在尝试用 C++ 编写我的第一个井字游戏。了解这一点会对我有所帮助。

【问题讨论】:

  • "指向它的 char 指针不应该也是 1 个字节吗?"不,当然不应该。如果是这样,您将只能拥有 256 个不同的 char 对象。 char* 指针不存储那个字节 - 它存储那个字节的内存地址。您计算机的 RAM 有超过 256 个不同的地址。
  • “指向它的char指针不应该也是1字节吗?”:请解释您认为它应该是的原因,以便我们识别误解。比如,你认为“char指针”是一种“char”吗?
  • “我正在尝试用 C++ 编写我的第一个井字游戏。理解这一点会对我有所帮助。” -- 会吗?如何?您可能对无关紧要的细节过于担心。如果我要编写井字游戏,我怀疑数据类型的确切大小是否与我的任何代码相关。 (充其量,我可能会利用sizeof(char) &lt;= sizeof(char*)这一事实。)
  • 这能回答你的问题吗? Is the sizeof(some pointer) always equal to four? 或者 sizeof a pointer,更多关于“为什么”的问题。

标签: c++ arrays pointers char sizeof


【解决方案1】:

这是因为指针是它自己的一种类型,它用于保存内存地址。 (不管是charint等的地址)

在您的系统上,指针类型为 8 字节长,因此它可以存储 8 字节(64 位)地址(但其大小取决于系统)。

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2018-08-04
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多