数组特性

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 中实现。 最小数组索引始终被视为零。