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

时间:2013-03-10 19:15:25

标签: c function pointers core-graphics

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

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

2 个答案:

答案 0 :(得分:2)

  

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

我们是。

将数组传递给函数时,它不是传递的数组的内容。而是传递指向数组的第一个元素的指针;我们说数组会衰减为指针。正如您可以从函数的原型中看到的那样。

如果你传递了&arr,那么技术上就是同一个指针,但它会是另一种类型(它是一个指向数组的指针,uint32_t (*)[10]),但传递一个指针 - 当指向(指向数组的元素的类型)的指针无效时,to-array。请勿使用&

答案 1 :(得分:1)

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

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