据我了解,我将变量的地址传递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 节),因为它没有明确列出。intX[2]*pint
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 先前指向的值,第二个是零。此复合文字中的表达式不必是常量。未命名对象具有自动存储期限。