这可能是一个菜鸟问题..但这确实让我感到困惑。

以下是一些示例代码

void main() {

    int a = 300;
    char *ptr = &a;
    int *intptr = &a;

    printf("%d\n %d\n", *ptr, *intptr);

}


输出:
44
300

根据我的理解,为什么取消引用*ptr打印44是由于char指针是一个字节,所以它只能从int地址中读取8位...

但这question:What is the size of a pointer?表示Regardless of what data type they are pointing to, they have fixed size

我是否缺少某些东西。如果指针大小相同,为什么要取消引用char指针打印44?

最佳答案

在大多数可能会遇到的大多数系统上,对象指针(例如,指向函数以外的任何东西的指针)的大小通常相同,但是并不能保证如此。话虽这么说,尽管指针的大小可能相同,但它们指向的类型却不同。

例如,在64位Windows系统上,指针的大小通常为8个字节。在您的示例中,您有char *int *,它们很可能都是8个字节。此处的区别在于,取消引用char *将读取/写入1个字节,而取消引用int *将读取/写入4个字节(假定int为32位)。

假设字节序的字节序很少,a在内存中看起来像这样:

  ------------------
a | 44 | 1 | 0 | 0 |
  ------------------


ptrintptr都包含a的地址。取消引用类型为ptrchar *时,它仅查看第一个字节。相反,当取消引用类型为intptrint *时,它将查找全部4个字节。

09-09 23:15
查看更多