首页 > 解决方案 > 指针大小不正确

问题描述

我正在研究指针,发现指针的大小不正确。

我学到的是,因为p_num它是一个指向 int 的指针,它应该显示 4 个字节,但显示的是 8 个字节。

可能的原因是什么?

#include <stdio.h>

int main()
{
    int num = 0;
    int * p_num = NULL;

    num = 10;

    printf("num address: %p\n", &num);
    printf("num size: %zd\n", sizeof(num));
    printf("num value: %d\n\n", num);

    p_num = &num;

    printf("p_num address: %p\n", (void*)&p_num);
    printf("p_num size: %zd\n", sizeof(p_num));
    printf("p_num value: %p\n", p_num);
    printf("p_num value pointed: %d\n", *p_num);

    return 0;
}

输出:

num address: 0x7fffcb0e8ffc
num size: 4
num value: 10

p_num address: 0x7fffcb0e8ff0
p_num size: 8
p_num value: 0x7fffcb0e8ffc
p_num value pointed: 10

标签: cpointersmemorysize

解决方案


我学到的是,因为p_num它是一个指向 int 的指针,它应该显示 4 个字节,但显示的是 8 个字节。

你的假设是不正确的。

int一个变量。

int pointer另一个变量。

所以两个不同的变量,这两个变量不需要具有相同的大小。

换句话说:

printf("p_num size: %zu\n", sizeof(p_num));   // Gives you the size of the pointer

printf("p_num size: %zu\n", sizeof(*p_num));  // Gives you the size of the pointed to object
                                   ^
                                   notice the *

在您的情况下,您会看到 size ofint是 4 而 size ofint pointer是 8。这是完全合法的。

char最有可能的是,您可以通过查看 a和 a来使尺寸差异更大char pointer。那么您很可能会看到 1char和 8 char pointer


推荐阅读