当数组变量被认为是指针时,它被认为是C中的简单数组?例如,有时sizeof(array_variable)运算符返回地址大小,有时它返回数组的大小。
答案 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()
的特化是,如果应用于数组变量,它将返回数组的大小。