C 存储指针所占用的内存是否比它存储的字节多';他指的是什么?

C 存储指针所占用的内存是否比它存储的字节多';他指的是什么?,c,C,我的问题是指针值如何存储在哪里,它们在内存中是否比它们指向的东西占用更多的空间。例如,如果我有一个64位指针,我用它指向内存中的一个信息字节;指针的值存储在哪里?它是否比数据本身占用更多的空间 我的问题的一个例子是用C写的 字符数据=10 char*charPointer=&data 因为指针是64位的,数据是8位的,所以charPointer不比数据占用更多的空间吗 附言:我目前正在努力学习C语言的基础知识 其中存储了指针的值 指针的值存储在您声明要存储的位置;e、 g.如果将指针声明为局部变

我的问题是指针值如何存储在哪里,它们在内存中是否比它们指向的东西占用更多的空间。例如,如果我有一个64位指针,我用它指向内存中的一个信息字节;指针的值存储在哪里?它是否比数据本身占用更多的空间

我的问题的一个例子是用C写的

字符数据=10

char*charPointer=&data

因为指针是64位的,数据是8位的,所以charPointer不比数据占用更多的空间吗

附言:我目前正在努力学习C语言的基础知识

其中存储了指针的值

指针的值存储在您声明要存储的位置;e、 g.如果将指针声明为局部变量,则它将存储在堆栈上;o如果在堆上分配了指针(或者,更常见的是,将指针作为在堆上分配的对象的成员变量包含在内),那么指针将在堆中

它是否比数据本身占用更多的空间

在这种情况下,确实如此

实际上,您可以自己检查一个值占用了多少空间:

printf("data takes up %zu bytes\n", sizeof(data));
printf("charPointer takes up %zu bytes\n", sizeof(charPointer));
如果您在64位计算机上,您应该会发现指针占用8个字节,正如您所期望的那样


指针指向的字符占用一个字节,但在许多情况下,还会插入一些填充字节,以保持堆栈上下一项的对齐,从而使CPU能够高效访问。

在几乎每个C实现中,指向
char
的指针比
char
占用更多空间。(C标准允许它们的大小相同,但这样的实现充其量也很少见,更可能是过时的或不存在的。)

尽管如此:

  • 您可能需要一个指针来指向所选对象中的一个,或者管理对象,或者以各种方式连接对象
  • 指针可以指向比字符大得多的对象
  • 指针可以指向数组中许多元素的第一个,因此一个指针可以提供对多个对象的访问

  • 除关于两种语言的差异或相互作用的问题外,请不要标记C和C++。要对两种语言提出相同的问题,请针对每种语言提出一个问题。
    sizeof
    运算符给出与某个对象使用的内存相关的结果。通常
    sizeof(char*)
    由实现定义,但在实践中通常大于
    1
    (例如,在32位系统上通常为4,在64位系统上通常为8)
    sizeof(char)
    根据定义是
    1
    。例如,
    4>1
    8>1
    不需要太多逻辑运算。问题在于,编译器可能会优化不存在的
    charPointer
    ,从而在运行时不使用任何内存,这取决于使用它所做的操作。虽然不常见,但在某些系统上
    char
    大于8位(例如UTF-16)。虽然在实践中,指针不可能小到8位,但所选的本机
    char
    类型可能大到与指针大小相同。