'var = &Binary[0][0][0][0]' 在 C 中是什么意思?
What does 'var = &Binary[0][0][0][0]' mean in C?
我看到了这个作业:
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
所以它毕竟是一个数组!
但是我对数组名称的第一个字符是 & 符号感到惊讶?
代码中的某处可能是一个名为 Binary
的多维数组的声明很可能是类型 uint16_t
(16 位无符号整数)[=16= 的 4 维数组]
uint16_t Binary[MAX_MODULES][MAX_SECTORS][MAX_SYLLABLES][MAX_WORDS];
这个表达式:&Binary[0][0][0][0]
是这个多维数组中第一个元素的地址。虽然数组被声明为 4 维数组,但看起来 for 循环只是通过指针枚举数组中的所有元素,以使用 ILLEGAL_VALUE
常量初始化每个元素。
就其价值而言,for 循环可能会被替换为:
memset(Binary, 0xff, sizeof(Binary));
关于:
u = &Binary[0][0][0][0]
这意味着用 4 维数组中第一个条目的地址设置 u
的内容
我看到了这个作业:
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
所以它毕竟是一个数组!
但是我对数组名称的第一个字符是 & 符号感到惊讶?
代码中的某处可能是一个名为 Binary
的多维数组的声明很可能是类型 uint16_t
(16 位无符号整数)[=16= 的 4 维数组]
uint16_t Binary[MAX_MODULES][MAX_SECTORS][MAX_SYLLABLES][MAX_WORDS];
这个表达式:&Binary[0][0][0][0]
是这个多维数组中第一个元素的地址。虽然数组被声明为 4 维数组,但看起来 for 循环只是通过指针枚举数组中的所有元素,以使用 ILLEGAL_VALUE
常量初始化每个元素。
就其价值而言,for 循环可能会被替换为:
memset(Binary, 0xff, sizeof(Binary));
关于:
u = &Binary[0][0][0][0]
这意味着用 4 维数组中第一个条目的地址设置 u
的内容