数组特性
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 属性支持数组边界。
Attribute | 说明 | 默认 |
---|---|---|
[ first_is] | 传输的第一个数组元素的索引。 | 0 |
[ last_is] | 传输的最后一个数组元素的索引。 | - |
[ length_is] | 传输的数组元素总数。 | - |
[ max_is] | 最高有效数组索引值。 | - |
[ min_is] | 最低有效数组索引值。 | 0 |
[ size_is] | 为数组分配的数组元素总数。 | - |
注意
min_is 属性未在 RPC 中实现。 最小数组索引始终被视为零。