c - 指针大小不正确
问题描述
我正在研究指针,发现指针的大小不正确。
我学到的是,因为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 = #
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
解决方案
我学到的是,因为
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
。
推荐阅读
- visual-studio - Visual Studio 热键无法正常工作
- php - 在主题类中找不到 PhpStorm 引用的方法
- batch-file - 从传递的变量中删除尾随空格
- android - 无法将编译好的sdk版本升级到27
- animation - 如何让 Highstock 工具提示像 Highcharts 一样制作动画?
- plot - 如何在 Julia 中绘制向量场?
- powershell - 每种语言的passwordLastSet 和password 即将过期,然后发送电子邮件
- java - 如何计算完成程序所需步骤的输出
- codeigniter - 将 http 和 http://www 转换为 https 和 https://www
- python - 如何从无冗余傅立叶变换(例如 PyTorch)到冗余(完整)傅立叶变换?