我认为,道歉是一个相当无知的新手问题。
CGDirectDisplayID displays[10];
uint32_t numDisplays;
CGGetOnlineDisplayList(10, displays, &numDisplays);
上面的函数填充了display []数组,并将结果(在线显示的数量)返回给numDisplays。标题中的定义如下:
CG_EXTERN CGError CGGetOnlineDisplayList(uint32_t maxDisplays,
CGDirectDisplayID *onlineDisplays, uint32_t *displayCount)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_NA);
我理解为什么我们使用'& numDisplays':我们给函数提供变量的地址,以便它可以直接更改它。但是为什么我们不在数组中使用相同的操作数?我们不应该像处理numDisplays那样处理它吗?当我们没有将其地址传递给函数时,函数如何管理填充数组?
答案 0 :(得分:2)
当我们没有将地址传递给函数时,函数如何设法填充数组?
我们是。
将数组传递给函数时,它不是传递的数组的内容。而是传递指向数组的第一个元素的指针;我们说数组会衰减为指针。正如您可以从函数的原型中看到的那样。
如果你传递了&arr
,那么技术上就是同一个指针,但它会是另一种类型(它是一个指向数组的指针,uint32_t (*)[10]
),但传递一个指针 - 当指向(指向数组的元素的类型)的指针无效时,to-array。请勿使用&
。
答案 1 :(得分:1)
数组衰减指向第一个元素的指针。
所以&display[0];
等于displays;