c - 数组参数大小有什么影响?

时间:2013-01-31 12:00:02

标签: c

下面的foo函数找到给定数字的第一个匹配项并返回它的索引。如果未找到该数字,则返回数组的大小(n):

‪int foo(int arr[10], int num, int n)‬
{
‫;‪   int *p‬‬
‪   for (p=arr;(*p!=num) && (p<arr+n);++p);‬‬
   ‫;‪return p-arr‬‬
}

我的问题是:参数int arr[10]与撰写int * arrint arr[]相同吗?因为当我传递一个大小为100的int数组时,我可以遍历它并且我不会只限制为10个元素。

5 个答案:

答案 0 :(得分:2)

  

我的问题是:参数int arr[10]与撰写int *arrint arr[]相同吗?

是的,只要它是函数参数列表的声明的一部分,该数组就是一维的。

答案 1 :(得分:2)

是的,函数参数列表中的int arr[10]int arr[]int *arr都是完全相同的。

在C99中,您有一个选项:int arr[static 10]。这意味着您必须向该函数传递一个指向至少10个元素的地址(在未定义行为的惩罚下)。

答案 2 :(得分:1)

为什么您希望您的代码被“封顶”?会发生什么?

C没有“安全”数组索引,它只会索引你告诉它的位置。你不能走出界限。

在我看来,最好明确地传递大小,因为这样做会使函数更通用,并避免混淆数组/指针问题。

答案 3 :(得分:0)

你可以迭代,但在你记忆的一个区域你不应该 干净的方法是,

int foo(int *arr, int num, int n)‬
{
    int i;
 ‪   for (i=0;arr[i]!=num && i<n; i++);‬‬
    ‫;‪return i‬‬
}

此外,既然你做p = arr然后使用p,那么定义arr的方式并不重要

答案 4 :(得分:0)

如果你做* arr,你基本上是将指针传递给数组的第一个元素。

由于指针的行为可以作为数组使用的补充,所以根本没有问题。

当你执行类似arr [1]的操作时,第一个元素的指针arr会自动增加1并指向数组中第二个元素的地址。

相关问题