2011-09-29 37 views

回答

2

当大多数上下文中出现数组类型的表达式时,它会隐式转换(“decays”)为指针类型的表达式,其值是数组中第一个元素的地址。类似地,在函数参数声明的上下文中(但在该上下文中仅为),诸如T a[]T a[N]的声明被解释为T *a;尽管数组符号,参数a是一个指针,而不是数组类型。

int arr[10]; 
... 
foo(arr); 

类型在调用foo表达arr的所以,有了代码是“的int 10元件阵列”。在这种情况下,表达式的类型被转换为“指向int”,因此foo将收到一个指针值。

类似地,给定的一个函数定义

void foo(int a[10]) 
{ 
    ... 
} 

参数a的类型“的int 10元件阵列”,而是表示“指针int”。

简而言之,您不能将数组参数传递给函数,并将其作为数组类型接收;你得到的只是一个指针值。因此,必须或者将数组大小作为单独的参数传递,或者使用标记值终止数组(例如,使用char数组中的0来终止字符串)。当阵列表达显示为一个操作数,以任一sizeof或一元&运营商,或者如果它是一个字符串被用来初始化一个声明另一个阵列


的此规则的例外是。

2

字符数组只如果它作为一个空终止字符串被明确地处理与\0结束。一般来说数组中没有终止字符,也没有办法知道数组的大小而不用传递大小。

4

在C中,有一个阵列和指向数据之间的差。当“将一个数组传递给一个函数”时,你实际上传递了一个指向该函数的指针。不幸的是,你可以不知道,如果一个指针指向一个元素,或元素的序列,而这是不可能告诉序列有多少个元素组成的。

另外,与一个字符串,一个int数组不与一个特定的值结束。

相关问题