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.
它是复合文字的指针.
C11-§6.5.2.5复合文字(p9):
例2,相反,在
Run Code Online (Sandbox Code Playgroud)void f(void) { int *p; /*...*/ p = (int [2]){*p}; /*...*/ }p被赋予两个整数数组的第一个元素的地址,第一个元素具有先前由p指向的值,第二个具有零.此复合文字中的表达式不必是常量.未命名的对象具有自动存储持续时间.