小编jef*_*eff的帖子

为什么即使数组衰减到POINTERS,将函数的参数保持为ARRAY也没关系?

请原谅我的坏英语,

让我澄清,这是一个例子,

这是我们的主要内容:

 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也没关系?".希望很清楚第一个问题是如何不同的.谢谢!

c c++ arrays pointers

3
推荐指数
1
解决办法
92
查看次数

log(n!) 等价于 nlogn 吗?(大 O 符号)

在我的书中有一个选择题:

以下函数的大 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?

complexity-theory big-o time-complexity

1
推荐指数
1
解决办法
4225
查看次数

标签 统计

arrays ×1

big-o ×1

c ×1

c++ ×1

complexity-theory ×1

pointers ×1

time-complexity ×1