【问题标题】:C, Printing the size of character pointer in C [duplicate]C,在C中打印字符指针的大小[重复]
【发布时间】:2019-08-06 09:12:04
【问题描述】:
char a[]="hello";
char *p=a;
printf("%d",sizeof(p));

预期的输出是 4 或 8,但我们得到的输出是 2。

使用 TurboC3

【问题讨论】:

  • 我在我的 MacBook Pro 上试过了,我得到了 8 预期的结果。你是在笔记本电脑还是 MCU 上运行它的?我想如果 CPU 是 16 位的,那么你就有可能得到2
  • 微弱相关(通过 cmets):stackoverflow.com/questions/55180062/… TurboC 已经过时并且以自己的方式做事。试试别的。此外,您可能应该要求 %lu 作为格式说明符,而不是 %d。
  • 检查编译器是否有名为“内存模型”的设置以及是否存在 - 将其设置为大以查看4 的结果。或者干脆将定义更改为char far *p=a;
  • size_t 值的格式为 "%zu"。 Turbo C 可能不支持,所以转换为某个格式存在的时间,例如printf("%lu\n", (unsigned long)sizeof p);

标签: c


【解决方案1】:

我强烈推荐“Assembly Language: Step by Step Jeff Duntemann”(不是整本书,只是内存模型部分)。

指针的大小取决于它需要寻址多少内存。您期望四个字节,即 32 位,它可以寻址 4 Gigs 的内存。当您进行一些研究时,您会发现在开发 Turbo C 时(八十年代),任何个人计算机中都没有 4 Gig 内存。

由于没有这种容量的内存(最大为几兆字节),即使在那之后,大多数应用程序对于较新的x86 CPU 和高端硬件来说都过于“轻量级”(为了向后兼容) (当然包括内存),应用程序获得了该内存的一部分(@Nadim 所述的 turbo c 为 64k)。那么,既然您已经知道指针永远不会使用最后 2 个字节,为什么还要费心将指针设置为 4 个字节。

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 2023-03-15
    • 1970-01-01
    • 2015-12-26
    • 2023-03-12
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多