你能帮我理解指针和地址吗?

Posted

技术标签:

【中文标题】你能帮我理解指针和地址吗?【英文标题】:Can you help me understand pointers and addresses? 【发布时间】:2011-03-26 01:37:58 【问题描述】:

我可以在一个 RAM 地址中存储多少字节?

一个指针的大小是多少?

我只是不确定这些基本概念,我需要一些帮助。谢谢大家。

【问题讨论】:

【参考方案1】:

您通常可以在每个内存位置存储一个字节。 (旧机器可能使用非八位字节word sizes,这些机器可能存储一个nibble 或每个内存位置12 或24 位。)但是现在,8 位是一个字节,一个字节是一个内存位置,尽管它可能不是机器的字长。

指针的大小可能会有所不同:在 32 位平台上,指针通常为 4 个字节。在 64 位平台上,指针通常为 8 个字节。 Older platforms had different sizes of pointers 允许程序员更密切地优化他们程序的内存需求。 (我很高兴那些日子一去不复返了。)

第一次启动 C 时让我感到困惑的是,指针引用的内存位置会根据指针的数据类型递增不同的数量。

char *c;
int *i;

当使用偏移量或增加指针(c+1i+1)时,编译器将为 char * 指针添加 1,为 48 添加 int * 指针。我的汇编器没有提供这样的细节,我花了几个月的时间才掌握了“C 编译器知道类型的大小,只要相信它”的窍门。

【讨论】:

谢谢萨诺德。对我来说是一个非常生动而清晰的解释。【参考方案2】:

指针在 32 位系统上通常有 4 个字节,在 64 位系统上通常有 8 个字节 - 但这不是固定的,可能取决于系统。

地址只是你记忆中的一个位置,一个指针指向那个位置。但是数据可以超过一个字节 - 指针只显示第一个字节。

【讨论】:

以上是关于你能帮我理解指针和地址吗?的主要内容,如果未能解决你的问题,请参考以下文章

你能帮我理解 ARM Cortex-A9 上的缓存行为吗?

你能帮我理解这个吗? “常见的 REST 错误:会话无关紧要”

二级指针的用法?

谁能帮我讲一下 Java中的引用类型和引用变量

能帮我找个好Linux 下载地址吗?

你能帮我为matlab中ytop和ybot值的所有'ht'编写代码吗? [关闭]