找出C中的地址

找出C中的地址,第1张

概述我正在尝试学习如何在C中找出地址.对于下面的代码,假设它是在32位小端机器上编译的. struct { int n; char c;} A[10][10]; 假设A [0] [0]的地址是1000(十进制),A [3] [7]的地址是什么?任何帮助表示赞赏! C是行主要排序,这意味着首先计算最左侧的索引.从而: &A[3] == 1000 + (3 * 10 * sizeof(y 我正在尝试学习如何在C中找出地址.对于下面的代码,假设它是在32位小端机器上编译的.

struct {    int n;    char c;} A[10][10];

假设A [0] [0]的地址是1000(十进制),A [3] [7]的地址是什么?任何帮助表示赞赏!

解决方法 C是行主要排序,这意味着首先计算最左侧的索引.从而:

&A[3] == 1000 + (3 * 10 * sizeof(your_struct))

要查找列,我们只需添加剩余索引:

&A[3][7] == 1000 + (3 * 10 * sizeof(your_struct)) + (7 * sizeof(your_struct))

请注意,这与big-endian vs little-endian架构无关.这只是一个单词中字节的位置,而你想要一个数组中结构的位置.

另外,sizeof(your_struct)不能保证sizeof(n)sizeof(c),因为编译器可以填充你的struct.

最后,机器的32位特性意味着存储器地址寄存器的大小为32位. (换句话说,sizeof(voID *)== 32).它表明您的处理器可以实际分配一个地址的内存量.这是与C中数据类型大小不同的问题.

总结

以上是内存溢出为你收集整理的找出C中的地址全部内容,希望文章能够帮你解决找出C中的地址所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存