我试过用sizeof(array)/sizeof(int)
,但似乎如果我通过了阵列到另一个函数,这并不工作。那么有没有其他方法可以知道数组的大小?如何获取函数中的数组大小而不计算长度或将其作为参数传递?
顺便说一句:我知道一个char[]
与'\0'
结束;哪个字符结束int[]
?
我试过用sizeof(array)/sizeof(int)
,但似乎如果我通过了阵列到另一个函数,这并不工作。那么有没有其他方法可以知道数组的大小?如何获取函数中的数组大小而不计算长度或将其作为参数传递?
顺便说一句:我知道一个char[]
与'\0'
结束;哪个字符结束int[]
?
当大多数上下文中出现数组类型的表达式时,它会隐式转换(“decays”)为指针类型的表达式,其值是数组中第一个元素的地址。类似地,在函数参数声明的上下文中(但在该上下文中仅为仅),诸如T a[]
和T a[N]
的声明被解释为T *a
;尽管数组符号,参数a
是一个指针,而不是数组类型。
像
int arr[10];
...
foo(arr);
类型在调用foo
表达arr
的所以,有了代码是“的int
10元件阵列”。在这种情况下,表达式的类型被转换为“指向int
”,因此foo
将收到一个指针值。
类似地,给定的一个函数定义
void foo(int a[10])
{
...
}
参数a
的类型不“的int
10元件阵列”,而是表示“指针int
”。
简而言之,您不能将数组参数传递给函数,并将其作为数组类型接收;你得到的只是一个指针值。因此,必须或者将数组大小作为单独的参数传递,或者使用标记值终止数组(例如,使用char
数组中的0来终止字符串)。当阵列表达显示为一个操作数,以任一sizeof
或一元&
运营商,或者如果它是一个字符串被用来初始化一个声明另一个阵列
的此规则的例外是。
字符数组只如果它作为一个空终止字符串被明确地处理与\0
结束。一般来说数组中没有终止字符,也没有办法知道数组的大小而不用传递大小。
在C中,有一个阵列和指向数据之间的差。当“将一个数组传递给一个函数”时,你实际上传递了一个指向该函数的指针。不幸的是,你可以不知道,如果一个指针指向一个元素,或元素的序列,而这是不可能告诉序列有多少个元素组成的。
另外,与一个字符串,一个int数组不与一个特定的值结束。