【问题标题】:What is the meaning of int[]int[]是什么意思
【发布时间】:2015-08-28 13:46:47
【问题描述】:

在C编程中声明int[]是什么意思?就像在这段代码中

int findPivot(int[], int, int);

【问题讨论】:

  • 在给定的代码中,它是一个int*,一个指向int的指针。
  • 这是一个int的数组。 The Definitive C Book Guide and List
  • int[] - int 数组,例如指向整数数组的指针。

标签: c function coding-style int


【解决方案1】:
 int findPivot(int[], int, int);

是一个函数声明。有时,它也被称为Forward declarationFunction prototype

FWIW,在函数声明中,你可以省略变量名,只指定变量类型就足够了。

此特定上下文中,int[]int* 具有相同的含义,即int[] 是指函数接受指向int 的指针作为第一个参数.

在调用函数时,我们可以通过

  • 指向 int
  • 的指针
  • 一个int 数组(由于array decaying 在传递参数时的影响,数组类型参数归结为一个指针)。

你可以调用函数为

#define MAX 128

int actualArray[MAX] = {0};
int p = <somevalue>;
int q = <someothervalue>;
//somecode 
int retval = findPivot(actualArray, p, q); 

【讨论】:

  • 说它接受int 数组作为第一个参数是正确的,但具有误导性。它接受任何指向int 的指针。
  • 也许只是说第一个参数确实是int*,但是因为数组衰减它可以接受数组参数?
  • 好的,数组 decay 允许您将数组名称作为 argument 传递给带有指针 parameter 的函数.所以 int[] 不是 int* 因为衰变。之所以如此,是因为类型被 调整 为指针。这有意义吗?
  • 这样更好!而且没有必要做那种“先生”的生意;-)
  • @juanchopanza 谢谢。至于“先生”,则是MMM
【解决方案2】:

鉴于您询问的是int[] 类型的函数参数,在这种特殊情况下,它等效于指向int 的指针,即int*。两者没有区别。在其他情况下,int[] 可能有不同的含义。

这两个函数声明是一样的:

void foo(int[]);
void foo(int*);

两者都等价于:

void foo(int[42]);

如果你要定义多个,你会得到一个多重定义错误

void foo(int[]) {}
void foo(int*) {} // ERROR! Multiple definition.

现在,由于 C 允许数组衰减为指针,您实际上可以使用 int 数组作为 参数 调用 foo。数组衰减为指向其第一个元素的指针。

int a[42];
int b[99];
int c;
foo(a);
foo(b);
foo(&c);

由于衰减指向一个指针,所有数组大小信息都丢失了。

【讨论】:

    【解决方案3】:

    在您指定的情况下,它指定带有参数存根int[] 的函数的第一个位置可用于任何数组参数

    如果它在这样的分配中

    int values[] = {9, 2, 6, 1, 4};

    这意味着将使用与初始化该数组时添加的数组项一样多的数组项来创建值,在本例中为 5。

    【讨论】:

      【解决方案4】:

      在这个函数声明中

      int findPivot(int[], int, int);
      

      int[] - 将函数参数声明为具有未知数量元素的整数数组类型。所以它是一个不完整的类型。

      编译器将此声明调整为指针。所以这两个函数声明是等价的

      int findPivot(int[], int, int);
      int findPivot(int *, int, int);
      

      当您将数组作为参数的对应参数传递时,它会隐式转换为指向其第一个元素的指针。所以数组中元素的数量并不重要。因此,上述两个声明可以附加一个函数声明,其中指定数组中的元素数量。例如

      int findPivot(int[10], int, int);
      int findPivot(int[20], int, int);
      int findPivot(int[], int, int);
      int findPivot(int *, int, int);
      

      这些声明声明了同一个函数。

      【讨论】:

        【解决方案5】:

        findPivot 需要一个 int array 和两个 int 变量。 int 数组实际上是一组整数值。在这种情况下,它相当于int pointer

        【讨论】:

        • 你能告诉我为什么你认为这个答案没有帮助吗?
        猜你喜欢
        • 1970-01-01
        • 2011-06-05
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 2013-05-16
        相关资源
        最近更新 更多