“p =(int [2]){* p};”是什么意思C指针中的行?

时间:2017-10-31 17:36:49

标签: c pointers compound-literals

根据我的理解,我将变量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;
}

2 个答案:

答案 0 :(得分:11)

使用int ffx1(int * p)p是指向int的指针。

(int[2]){*p}是一个复合文字,用于定义int数组2. @BLUEPIXY这个未命名的数组我们将调用X[2]。它的第一个元素的值为*p,而下一个元素int将被初始化为零(§6.7.921& 10),因为它没有明确列出。

p = ....将指针p分配给新值。在这种情况下,上面的数组X[]将转换为其首次注册的地址或&X[0]

return p[1]取消引用p,返回X[1]0中的值。

答案 1 :(得分:8)

这是指向复合文字的指针

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

  

示例2相反,在

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

p被赋予两个数组的第一个元素的地址   ints,第一个具有p和之前指向的值   第二,零。这个复合文字中的表达式不一定是   不变。未命名的对象具有自动存储持续时间。