声明它时,C编程中int[]
的含义是什么?就像在这段代码中一样
int findPivot(int[], int, int);
答案 0 :(得分:4)
鉴于您询问类型为int[]
的函数参数,在此特定情况下,它等同于指向int
的指针,即int*
。这两者没有区别。在其他情况下,int[]
可能有不同的含义。
这两个函数声明是相同的:
void foo(int[]);
void foo(int*);
两者都等同于:
void foo(int[42]);
如果您要定义多个,则会出现多重定义错误
void foo(int[]) {}
void foo(int*) {} // ERROR! Multiple definition.
现在,由于C允许数组衰减为指针,因此您实际上可以使用foo
数组作为参数调用int
。数组衰减到指向其第一个元素的指针。
int a[42];
int b[99];
int c;
foo(a);
foo(b);
foo(&c);
由于衰减是指针,所有数组大小信息都会丢失。
答案 1 :(得分:2)
在此功能声明中
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);
这些声明声明了同一个函数。
答案 2 :(得分:1)
int findPivot(int[], int, int);
是一个函数声明。有时,它也被称为Forward declaration或Function prototype。
FWIW,在函数声明中,你可以省略变量名,只指定变量类型就足够了。
在此特定上下文中,int[]
和int*
具有相同的含义,即int[]
这里指的是函数接受指向{的指针{1}}作为第一个参数。
在调用函数时,我们可以传递
int
或int
数组(因为传递参数时array decaying效果,数组类型参数归结为指针)。您可以将该功能称为
int
答案 3 :(得分:0)
在您指定的情况下,它指定具有参数stub int[]
的该函数的第一个位置可用于任何数组参数
如果它在这样的分配中
int values[] = {9, 2, 6, 1, 4};
这意味着将使用在初始化该数组时添加的数组项创建值,在本例中为5。
答案 4 :(得分:-1)
findPivot需要一个int array和两个int
变量。 int
数组实际上是一组整数值。在这种情况下,它相当于int pointer。