指向数组的指针作为函数参数

MPe*_*ier 6 c pointers

我写了一个函数,它接受一个指向数组的指针来初始化它的值:

#define FIXED_SIZE 256
int Foo(int *pArray[FIXED_SIZE])
{
/*...*/
}

//Call:

int array[FIXED_SIZE];
Foo(&array);
Run Code Online (Sandbox Code Playgroud)

它不编译:

错误C2664:'Foo':无法将参数1从'int(*__ w64)[256]'转换为'int*[]'

但是,我一起攻击了这个:

typedef int FixedArray[FIXED_SIZE];
int Foo(FixedArray *pArray)
{
/*...*/
}

//Call:

FixedArray array;
Foo(&array);
Run Code Online (Sandbox Code Playgroud)

它有效.我在第一个定义中缺少什么?我以为这两个是等价的......

cni*_*tar 14

int Foo(int *pArray[FIXED_SIZE])
{
/*...*/
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,pArray是一个指针数组,而不是指向数组的指针.

您需要括号来使用指向数组的指针:

int Foo(int (*pArray)[FIXED_SIZE])
Run Code Online (Sandbox Code Playgroud)

你可以免费获得这个typedef(因为它已经是一个类型,*具有不同的含义).换句话说,这种typedef类型带有自己的括号.

注意:经验表明,在99%的人使用指向数组的指针的情况下,他们可以而且实际上应该只使用指向第一个元素的指针.