gpt4 book ai didi

c - 使用前面的参数来定义后面参数中的 VLA?

转载 作者:行者123 更新时间:2023-11-30 15:11:42 27 4
gpt4 key购买 nike

函数的参数可以在后面的参数中使用吗?这是不好的形式吗?

void print(int n, int m, int matrix[n][m])
{
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
printf("%i ", matrix[i][j]);
}
printf("\n");
}
}

int main (void)
{
int matrix[2][2] = {{1,3},{3, 5}};
print(2, 2, matrix);
}

在尝试将二维数组传递给函数时,我发现了一些我不确定是否信任的技巧。它编译(gcc -Wall -std=c99)并运行,那么它有什么问题吗?

此外,这是否意味着参数是从左到右顺序读取和分配的?

最佳答案

matrix 参数是 variable length array (VLA)。 VLA 在 C99 中引入,但在 C11 中对 VLA 的支持是可选的。所以如果它能编译,那就好了。但不要指望它能在任何地方编译,例如嵌入式系统的编译器可能会选择不支持 VLA。

有关官方文档,请参阅 6.7.6.2 数组声明符 部分,其中第 10 段中包含这些示例:

enter image description here

关于c - 使用前面的参数来定义后面参数中的 VLA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518598/

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