gpt4 book ai didi

c - 可变长度数组的原型(prototype)

转载 作者:太空狗 更新时间:2023-10-29 17:14:29 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数采用 c 中的可变大小数组。

void sort(int s, int e, int arr[*]){
...
}

它说对于可变长度数组,它需要在函数声明中进行限制。那是什么意思?我正在使用带有 LLVM 编译器 2.0 的 xcode 4.0。

感谢您的帮助。

最佳答案

我看到没有人回答真正的问题,在这里我给出我的。

在 C99 中,您有可变长度数组 (VLA),它们声明的长度在运行时计算,而不仅仅是像以前版本的 C 那样在编译时计算。但是将数组传递给函数有点棘手。

一维数组总是作为指针传递,所以

void sort(size_t n, int arr[n]) {

}

相当于

void sort(size_t n, int *arr){

}

更高的维度很好地传递给了函数

void toto(size_t n, size_t m, int arr[n][m]){

}

相当于

void toto(size_t n, size_t m, int (*arr)[m]){

}

通过在这样的函数内部定义,您可以使用 arr[i][j] 表达式访问元素,并且编译器知道如何计算正确的元素。

现在是你发现的语法,它只对原型(prototype)有用,也就是你转发声明函数接口(interface)的地方

void toto(size_t, size_t, int arr[*][*]);

所以在这里您可以将数组维度替换为 * 作为占位符。但这仅在手头没有维度名称时才有用,使用与定义完全相同的版本会更清楚。

void toto(size_t n, size_t m, int arr[n][m]);

一般来说,为了一致地使用它,将尺寸放在参数列表的第一位很重要。否则当编译器解析 arr 的声明时,它们将不会被知道。

关于c - 可变长度数组的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7225358/

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