根据我的理解,我将变量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;
}
答案 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和之前指向的值 第二,零。这个复合文字中的表达式不一定是 不变。未命名的对象具有自动存储持续时间。