核心图形函数/C为什么被调用的函数填充已发送的数组?

核心图形函数/C为什么被调用的函数填充已发送的数组?,c,function,pointers,core-graphics,C,Function,Pointers,Core Graphics,我想这是一个相当无知的新手问题 CGDirectDisplayID displays[10]; uint32_t numDisplays; CGGetOnlineDisplayList(10, displays, &numDisplays); 上述函数填充displays[]数组,并将结果(联机显示的数量)返回给numDisplays。标题中的定义如下: CG_EXTERN CGError CGGetOnlineDisplayList(uint32_t maxDisplays, CG

我想这是一个相当无知的新手问题

CGDirectDisplayID displays[10];
uint32_t numDisplays;

CGGetOnlineDisplayList(10, displays, &numDisplays);
上述函数填充displays[]数组,并将结果(联机显示的数量)返回给numDisplays。标题中的定义如下:

CG_EXTERN CGError CGGetOnlineDisplayList(uint32_t maxDisplays,
CGDirectDisplayID *onlineDisplays, uint32_t *displayCount)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_NA);
我理解为什么我们使用“&numDisplays”:我们给函数变量的地址,以便它可以直接更改它。但是为什么我们不在数组中使用相同的操作数呢?我们不应该像处理numDisplays一样处理它吗?当我们不将其地址传递给函数时,函数如何填充数组?

数组会衰减为指向其第一个元素的指针

So
&显示[0]等于
显示

数组衰减为指向其第一个元素的指针

So
&显示[0]等于
显示

当我们不将其地址传递给函数时,函数如何填充数组

我们是

将数组传递给函数时,传递的不是数组的内容。而是传递指向数组第一个元素的指针;我们说数组退化为指针。从函数原型中可以看出

如果您传递了
&arr
,从技术上讲,这将是同一个指针,但它将是另一种类型(它将是指向数组的指针,
uint32\u t(*)[10]
),但是当需要指向-(数组元素类型)的指针时,传递指向数组的指针是无效的。不要使用
&

当我们不将其地址传递给函数时,函数如何填充数组

我们是

将数组传递给函数时,传递的不是数组的内容。而是传递指向数组第一个元素的指针;我们说数组退化为指针。从函数原型中可以看出


如果您传递了
&arr
,从技术上讲,这将是同一个指针,但它将是另一种类型(它将是指向数组的指针,
uint32\u t(*)[10]
),但是当需要指向-(数组元素类型)的指针时,传递指向数组的指针是无效的。不要使用
&

进行添加,这就是为什么函数“GCGetOnlineDisplayList”要求您告诉它数组包含多少元素(即,在本例中为10个)。它只知道数组的起始地址,其他什么都不知道。它使用第一个参数来确定大小。要添加,这就是为什么函数“GCGetOnlineDisplayList”要求您告诉它数组包含多少个元素(在本例中为10个)。它只知道数组的起始地址,其他什么都不知道。它使用第一个参数来确定大小。