我在处理一些 C 代码时遇到一些问题。有人可以解释一下这个语法吗:
void some_function(Int16 omegaFlag[2][8])
{
for(i = 0; i < 2; i++)
{
Int16 *Flag = omegaFlag[i] + 1;
for(j = 0; j < k; j++)
{
// do some stuff
*Flag++ = some_integer_value;
}
}
}
1.为什么some_function()
传入的参数Int16 omegaFlag[2][8]
声明索引值?他们如何帮助代码(一般而言,不是特定于此代码)?
2. *Flag++ = some_integer_value;
:这一行是什么意思?
最佳答案
omegaFlag[2][8]
的第一个索引不是必需的,编译器会忽略它。然而,第二个很重要,因为它告诉编译器这是一个二维数组,其中每行包含 8 个元素,因此前进指针将前进 8 个元素。
omegaFlag[2][8]
相当于 omegaFlag[][8]
或 (*omegaFlag)[8]
。然而,由于内存布局,它与 **omegaFlag
不同。 **omegaFlag
是一个指针数组,而 omegaFlag[2][8]
是一个数组数组 -- 空间正好容纳 8 个元素,或者总空间为16 个元素。
*Flag++
做了两件事,它取消引用 Flag,然后将其值增加 1。Flag 是一个指向 Int16 的指针,表示 i
中的第二个值code> 矩阵 omegaFlag 的第行。该赋值操作为该元素分配一个值,然后将 Flag 前进以指向下一个元素,该元素将在循环的下一次迭代中分配。
关于c - 无法理解令人困惑的 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438491/