Pow*_*ck1 2 c arrays pointers parameter-passing function-call
是的,以前曾经多次询问过,但我想知道哪一个更合适?
typedef struct {
    int a;
    int addr[8];
} usr_command;
usr_command* p_usr_command;
int foo(int* parameter)
{}
那么哪一个不太容易出问题?
foo(p_usr_command->addr);
要么
foo(&p_usr_command->addr[0]);
?
在这种情况下(传递数组名称与传递数组中第一个对象的地址作为函数参数),两个片段都是等效的.
引用C11,章节§6.3.2.1,左值,数组和函数指示符(强调我的)
除非它是运算
sizeof符,_Alignof运算符或一元运算&符的操作数,或者是用于初始化数组的字符串文字,否则将类型为''数组'的数组的表达式转换为类型为''的表达式指向类型''的指针指向数组对象的初始元素,而不是左值.[....]
但是,一般来说,它们并不相同.
array是一个类型的数组int [8]&(array[0])是一个指针,类型int *正如EOF在他的评论中已经提出的那样,尝试将两个变量传递给sizeof操作员并检查结果以获得动手输出.