gpt4 book ai didi

c++ - 为什么 C++ char 数据类型 3d array 当传递参数第一个括号为空时

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:01 25 4
gpt4 key购买 nike

请看下面的代码:

#include <iostream>
using namespace std;

int main(){

char matrix[2][2][2];

return 0;
}

int getMatrixData(char matrix[][2][2], int x, int y, int z) {
return matrix[x][y][z];
}

矩阵3d数组作为参数传入函数时,为什么不指定第一个[]大小就可以了?如何解释这个缺失的维度?

最佳答案

您的代码在语法上不正确。假设您的意思是 int getMatrixData(char matrix[][2][2], int x, int y, int z)

当您将数组参数传递给函数时,array decays to pointer到第一个元素(在本例中键入 char [2][2])。现在数组和指针的一些语法是相似的,所以你不会发现太大的区别。

当传递多维数组时,例如您的 3d,它可以看作是二维数组的数组。所以你需要在你的情况下给出每个元素的类型 char [2][2] 并且你可以跳过最终数组的维度,因为它无论如何都会衰减到指针。 char [2][2] 是编译器计算每个元素的偏移量所需的信息。

offset of matrix[x][y][z] = base address of matrix +
x * sizeof(char [2][2]) +
y * sizeof(char [2]) +
z

如果您不传递初始元素的尺寸,编译器将无法解析上述等式中的 sizeof。传递跳过的维度是可选的。

关于c++ - 为什么 C++ char 数据类型 3d array 当传递参数第一个括号为空时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42409160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com