是的,以前曾经多次询问,但我想知道哪一个更合适?
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]);
答案 0 :(得分:8)
在 此 的情况下(传递数组名称与传递数组中第一个对象的地址作为函数参数),两个片段都是等效的。
引用C11
,章节§6.3.2.1,左值,数组和函数指示符(强调我的)
除非它是
sizeof
运算符,_Alignof
运算符或者&
运算符的操作数。 一元array
运算符,或者是用于初始化数组的字符串文字,一个表达式 type ''类型''的数组被转换为类型''指向类型''指针的表达式 到数组对象的初始元素并且不是左值。 [....]
但是,一般来说,它们 不一样 。
int [8]
是&(array[0])
int *
是指针,类型为sizeof
正如EOF in his comment已经建议的那样,尝试将两个变体传递给.nav_bar {
background: #c30015;
margin-left: 50px;
float: left; }
.nav_bar ul {
padding: 0;
margin: 0;
display: flex;
border-bottom: thin white solid; }
.nav_bar ul li {
list-style: none; }
.nav_bar ul li a {
text-decoration: none;
color: #ffffff;
display: block;
border-right: 1px solid #fff;
padding: 8px 16px; }
.nav_bar ul li a:hover {
background: #e6b3a1;
text-decoration: none;
color: #c3000f; }
.down_nav_bar {
background: #e6b3a1;
margin-left: 34px;
float: left; }
.down_nav_bar ul {
padding: 0;
margin: 0;
display: flex; }
.down_nav_bar ul li {
list-style: none; }
.down_nav_bar ul li a {
text-decoration: none;
color: #c3000f;
display: block;
padding: 8px 23px 8px 18px; }
.down_nav_bar ul li a:link {
text-decoration: none; }
.down_nav_bar ul li a:visited {
border-bottom: 2px #c3000f solid;
text-decoration: none; }
.down_nav_bar ul li a:hover {
border-bottom: 2px #c3000f solid;
text-decoration: none; }
.down_nav_bar ul li a:active {
border-bottom: 2px #c3000f solid;
text-decoration: none; }
运算符并检查结果以获得动手输出。