“ var =&Binary [0] [0] [0] [0]”在C中是什么意思?

时间:2019-12-08 23:01:48

标签: c multidimensional-array binary variable-assignment

我看到了这个作业:

u = &Binary[0][0][0][0]

在for循环中:

for (i = 0, u = &Binary[0][0][0][0]; i < MAX_ADDRESSES; i++, u++)

此部分:

#define ILLEGAL_VALUE 0xFFFF
#define MAX_MODULES 8
#define MAX_SECTORS 16
#define MAX_SYLLABLES 3
#define MAX_WORDS 256
#define MAX_ADDRESSES (MAX_MODULES * MAX_SECTORS * MAX_SYLLABLES * MAX_WORDS)

...

int i;
uint16_t *u;

// Initialize the binary as completely unused.
for (i = 0, u = &Binary[0][0][0][0]; i < MAX_ADDRESSES; i++, u++)
  *u = ILLEGAL_VALUE;

用于汇编程序。

我对c(或其他编译语言)不是很熟悉,awk与c有点相似。

在awk中,var[x]是一个数组,但这似乎不是数组或任何其他变量。

这段代码'&Binary[0][0][0][0]'是什么?

编辑:

事实上我发现了这个

typedef uint16_t
    BinaryImage_t[MAX_MODULES][MAX_SECTORS][MAX_SYLLABLES][MAX_WORDS];
#define ILLEGAL_VALUE 0xFFFF

毕竟这是一个数组!

但是我对与号作为数组名称的第一个字符感到惊讶吗?

2 个答案:

答案 0 :(得分:3)

在代码中的某处可能是一个名为Binary的多维数组的声明,最有可能是类型uint16_t(16位无符号整数)的4-d数组

uint16_t Binary[MAX_MODULES][MAX_SECTORS][MAX_SYLLABLES][MAX_WORDS];

此表达式:&Binary[0][0][0][0]

是此多维数组中第一个元素的地址。虽然该数组被声明为4-d数组,但看起来for循环只是通过指针对数组中的所有元素进行枚举,以使用ILLEGAL_VALUE常量对其进行初始化。

对于它的价值,for循环很可能被替换为:

memset(Binary, 0xff, sizeof(Binary));

答案 1 :(得分:1)

关于:

u = &Binary[0][0][0][0]

这意味着将u的内容设置为4维数组中第一个条目的地址