我写了一个函数,它接受一个指向数组的指针来初始化它的值:
#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%的人使用指向数组的指针的情况下,他们可以而且实际上应该只使用指向第一个元素的指针.