当数组变量被视为指针时,它被视为简单数组?

时间:2013-09-10 15:44:01

标签: c arrays pointers

当数组变量被认为是指针时,它被认为是C中的简单数组?例如,有时sizeof(array_variable)运算符返回地址大小,有时它返回数组的大小。

4 个答案:

答案 0 :(得分:5)

C 2011(N1570)6.3.2.1 3:

  

除非是 sizeof 运算符, _Alignof运算符或一元& 运算符的操作数,或者是字符串用于初始化数组的文字,具有类型'' type ''数组的表达式将转换为类型为''指向 type '的指针的表达式,指向数组对象的初始元素,而不是左值。如果数组对象具有寄存器存储类,则行为未定义。

C 2011(N1570)6.7.6.3 7:

  

参数声明为'' type ''的数组应调整为''限定指向 type ''的指针,其中类型限定符(如果有的话) )是在数组类型派生的 [] 中指定的那些。

答案 1 :(得分:1)

在函数参数中,数组([])或[...])等同于指针(*)。因此sizeof(myarg) == sizeof(void*)void f(char *myarg);void f(char myarg[]);属于void f(char myarg[42]);

在全局变量和局部变量中,数组与指针不同。 sizeof(...)反映了这种差异。

数组总是可以自动转换为指针(但不是相反的方向),并且使用第一个元素的地址,即ary转换为&ary[0]

答案 2 :(得分:0)

始终将其视为指针。 当您使用不带索引的数组名称时,它将给出数组的基址。将数组名称与索引一起使用时,它将被视为*(数组名称+索引)。它从基地址给出indexe-th元素。 *数组表示第一个元素。

答案 3 :(得分:0)

数组变量的名称始终是指针。 sizeof()的特化是,如果应用于数组变量,它将返回数组的大小。