据我了解,我将变量的地址传递a
给函数int ffx1
。
在那之后,这条线到底是什么p = (int[2]){*p};
意思?
int ffx1(int * p)
{
p = (int[2]){*p};
return(p[1]);
}
int main()
{
int a = 1;
a = ffx1(&a);
printf("%d", a);
return 0;
}
据我了解,我将变量的地址传递a
给函数int ffx1
。
在那之后,这条线到底是什么p = (int[2]){*p};
意思?
int ffx1(int * p)
{
p = (int[2]){*p};
return(p[1]);
}
int main()
{
int a = 1;
a = ffx1(&a);
printf("%d", a);
return 0;
}
用int ffx1(int * p)
,p
是指向 的指针int
。
(int[2]){*p}
是定义2 数组的复合文字。 @BLUEPIXY我们将调用这个未命名的数组。它的第一个元素的值为,而下一个元素是 an将被初始化为零(第 6.7.9 节 21 和 10 节),因为它没有明确列出。int
X[2]
*p
int
p = ....
将指针分配p
给新值。在这种情况下,上面的数组X[]
被转换为其第一次注册的地址或&X[0]
.
return p[1]
取消引用p
,返回X[1]
or中的值0
。
它是一个指向复合文字的指针。
C11-§6.5.2.5 复合文字 (p9):
例 2 相反,在
void f(void) { int *p; /*...*/ p = (int [2]){*p}; /*...*/ }
p 被分配了两个整数数组的第一个元素的地址,第一个具有 p 先前指向的值,第二个是零。此复合文字中的表达式不必是常量。未命名对象具有自动存储期限。