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

hag*_*ago 7 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;
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 11

With int ffx1(int * p),p是一个指针int.

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

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

return p[1]去引用p,返回值X[1]0.


msc*_*msc 8

它是复合文字指针.

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

例2,相反,在

void f(void)
{
int *p;
/*...*/
p = (int [2]){*p};
/*...*/
}
Run Code Online (Sandbox Code Playgroud)

p被赋予两个整数数组的第一个元素的地址,第一个元素具有先前由p指向的值,第二个具有零.此复合文字中的表达式不必是常量.未命名的对象具有自动存储持续时间.