【发布时间】:2012-11-12 06:04:20
【问题描述】:
我正在尝试学习如何在 C 中计算地址。对于下面的代码,假设它是在 32 位小端机器上编译的。
struct {
int n;
char c;
} A[10][10];
假设 A[0][0] 的地址是 1000(十进制),那么 A[3][7] 的地址应该是多少?任何帮助表示赞赏!
【问题讨论】:
-
你的意思是
&A[0][0]... -
你应该在一个真正的程序中尝试一下。详细信息是编译器、操作系统、ABI 和指令集特定的。您可能需要在 GCC 中使用
offsetof和__alignof__和sizeof。 -
为什么不编译它,打印地址,然后弄清楚编译器是如何布局的?
-
最有可能的是,该结构将被填充到使用的最大数据类型的最近类型边界。这里它是 int,所以 A 的一个条目的 sizeof 将是 8 个字节。即 sizeof(A[0][0]) 将是 8。从起始地址开始计算。
标签: c multidimensional-array memory-address