c - 无法理解令人困惑的 C 语法

标签 c porting

我在处理一些 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/

相关文章:

c - 如何减少 vector 中的访问时间

c - Windows 到 Linux 的 Port C 项目

java - char* (Array) 强制转换为 unsigned long + 1?

python - 将 comtypes 移植到 win32com

c - 从子进程运行命令

c - 架构 x86_64 的 undefined symbol - C

c# - 使用 WPF 的 .NET 4 应用程序的 Mono 端口的 GUI

javascript - 将 [origin].concat(ray(nextStep)) 从 JavaScript 移植到 Swift

python - 从命名管道、C 程序(编写器)和 Python(读取器)获取额外数据

从 CSV 数据构建 C 数组