9

据我了解,我将变量的地址传递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;
}
4

2 回答 2

12

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

于 2017-10-31T17:50:57.120 回答
9

它是一个指向复合文字的指针。

C11-§6.5.2.5 复合文字 (p9):

例 2 相反,在

void f(void)
{
int *p;
/*...*/
p = (int [2]){*p};
/*...*/
}

p 被分配了两个整数数组的第一个元素的地址,第一个具有 p 先前指向的值,第二个是零。此复合文字中的表达式不必是常量。未命名对象具有自动存储期限。

于 2017-10-31T18:10:30.917 回答