【发布时间】:2020-06-18 16:34:20
【问题描述】:
我以前是 C# 程序员,对于 C 语言有一些我不明白的地方(具体来说,我正在使用 C99 标准进行编码)
我被告知无法知道 C 中数组的长度,我需要将其长度作为参数发送给我愿意使用的函数,但这是为什么呢?
例如,在 C# 中,我们可以输入 array_name.lenght
在二维数组中,为什么我必须指定数组的列数?我的意思是为什么这样做:
void test1 (int arr[][m])
{
}
虽然不是这样:
void test2 (int arr[][])
{
}
【问题讨论】:
-
“我需要将它的长度作为参数发送给我愿意使用的函数,但这是为什么呢?”因为该语言不支持其他方式。
-
这实际上是一个很好的问题——他问的是运行时环境的差异和历史视角,这比大多数人思考一门语言的深度要深。他不只是在说“为什么 C 很臭?”
-
您当然可以确定数组的长度:
sizeof array / sizeof array[0]。问题是 C 不允许数组作为函数参数,而看起来像数组类型的参数实际上是指针类型的。强烈推荐阅读:comp.lang.c FAQ 的第 6 节。
标签: c arrays function parameters c99