0

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

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 一样处理它吗?当我们不将其地址传递给函数时,该函数如何填充数组?

4

2 回答 2

2

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

我们是。

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

如果您通过&arr,从技术上讲,这将是相同的指针,但它将是另一种类型(它将是指向数组的指针,uint32_t (*)[10]),但是当指向数组的指针(类型为数组的元素)是必需的无效。不要使用&.

于 2013-03-10T19:18:57.920 回答
1

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

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

于 2013-03-10T19:18:50.503 回答