请原谅我的坏英语,
让我澄清,这是一个例子,
这是我们的主要内容:
main()
{
int a1 []= {1,2,3,4,5,6,7,8,9} ;
int size = sizeof(a1) /sizeof(a1[0]) ;
point (a1 , size);
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
这是功能:
void point(int a[] , int size)
{
int i ;
for (i = 0 ; i<size ; i++)
printf("%d\n", a[i])) ;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,当一个数组作为参数传递给一个函数时,我们实际上是发送一个指向数组的第一个元素的指针.
话虽如此,为什么函数"point"的参数是一个ARRAY变量,而不是一个POINTER变量......?
之所以我认为这很奇怪,所以例如在main中我们将int*传递给某个函数:
int* a = &b ;
point2(a) ;
Run Code Online (Sandbox Code Playgroud)
功能:
void point2 (int a) // this would be invalid, it has to be int* a
{
.
.
}
Run Code Online (Sandbox Code Playgroud)
我们必须指定函数接收指针,数组如何异常?
请注意:我确实理解数组衰减到指针; 这就是为什么我的问题永远不是"为什么我们可以将数组作为参数发送给具有相同类型指针的函数?".我的问题是,"即使数组衰减到POINTERS,为什么将函数的参数保持为ARRAY也没关系?".希望很清楚第一个问题是如何不同的.谢谢!
在我的书中有一个选择题:
以下函数的大 O 表示法是什么:n^log(2) +log(n^n) + nlog(n!)
我知道 log(n!) 属于 O(nlogn),但我在网上读到它们是等价的。log(n!) 和 nlogn 有什么相同之处?怎么样:log(n!) = logn + log(n-1) + ... + log2 + log1 等价于 nlogn?