C 语言中的数组和指针之间存在密切的关系。 作为参数传递给函数时,数组名称被视为指向数组第一个元素的指针,如以下示例所示:
/* fragment */
extern void f1(char * p1);
void main(void)
{
char chArray[MAXSIZE];
fLocal1(chArray);
}
在本地调用中,可以使用指针参数浏览内存并检查其他地址的内容:
/* dump memory (fragment) */
void fLocal1(char * pch1)
{
int i;
for (i = 0; i < MAXSIZE; i++)
printf("%c ", *pch1++);
}
当客户端将指针传递给远程过程时,客户端存根会同时传输指针及其指向的数据。 除非指针仅限于其相应的数据,否则所有客户端的内存都必须随每个远程调用一起传输。 通过在接口定义中强制强键入,MIDL 会将客户端存根处理限制为与指定指针对应的数据。
数组的大小和传输到远程计算机的数组元素的范围可以是常量或变量。 当这些值是可变的,因此在运行时确定时,必须使用 IDL 文件中的属性来指定要传输的数组元素数。 以下 MIDL 属性支持数组边界。
属性 | 描述 | 违约 |
---|---|---|
[ first_is] | 传输的第一个数组元素的索引。 | 0 |
[ last_is] | 传输的最后一个数组元素的索引。 | - |
[ length_is] | 传输的数组元素总数。 | - |
[ max_is] | 最高的有效数组索引值。 | - |
[ min_is] | 最低有效的数组索引值。 | 0 |
[ size_is] | 为数组分配的数组元素总数。 | - |
注意
min_is 属性未在 RPC 中实现。 最小数组索引始终被视为零。