0

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

4

4 回答 4

5

C 2011 (N1570) 6.3.2.1 3:

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

C 2011 (N1570) 6.7.6.3 7:

将参数声明为 ''array of type '' 应调整为 ''qualified pointer to type '',其中类型限定符(如果有)是在数组类型派生的[]中指定的那些。

于 2013-09-10T17:49:30.730 回答
1

在函数参数中,数组 ( []) 或[...]) 等价于指针 ( *)。对于和也是sizeof(myarg) == sizeof(void*)如此。void f(char *myarg);void f(char myarg[]);void f(char myarg[42]);

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

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

于 2013-09-10T15:54:22.097 回答
0

始终将其视为指针。当你使用不带索引的数组名时,它会给出数组的基地址。当您使用带有 index 的数组名称时,它将被视为 *(array name + index) 。它给出了基地址的第 index 个元素。*array 表示第一个元素。

于 2013-09-10T15:49:36.060 回答
0

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

于 2013-09-10T15:51:26.147 回答