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



抱歉,我想这是一个相当无知的新手问题。

CGDirectDisplayID displays[10];
uint32_t numDisplays;
CGGetOnlineDisplayList(10, displays, &numDisplays);

上面的函数填充displays[]数组并将结果(在线显示的数量)返回给numDisplays。header中的定义如下:

CG_EXTERN CGError CGGetOnlineDisplayList(uint32_t maxDisplays,
CGDirectDisplayID *onlineDisplays, uint32_t *displayCount)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_NA);

我明白为什么我们使用'&numDisplays':我们给函数变量的地址,以便它可以直接改变它。但是为什么不对数组使用相同的操作数呢?我们不应该像处理numDisplays那样处理它吗?当我们没有将其地址传递给函数时,函数如何管理填充数组?

当我们没有将数组的地址传递给函数时,函数如何设法填充数组?

将数组传递给函数时,传递的不是数组的内容。相反,传递的是指向数组第一个元素的指针;我们说数组衰变成一个指针。你可以从函数的原型中看到。

如果你传递的是&arr,那在技术上是相同的指针,但它将是另一种类型(它将是指向数组的指针,uint32_t (*)[10]),但是当需要指向-(数组元素的类型)的指针时传递指向数组的指针是无效的。不要用&

数组衰变成指向第一个元素的指针。

所以&display[0];等于displays;

最新更新