【发布时间】:2017-10-31 17:36:48
【问题描述】:
据我了解,我将变量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;
}
【问题讨论】:
-
(int[2]){*p}是复合文字。p = (int[2]){*p};如int array[2] = { *p, 0 }; p = array; -
如果它是填充数组的复合文字,它没有为数组的第二个元素指定值,它是返回的可能是 UB 的元素
-
@AndyG 是的,请参阅 BLUEPIXY 的评论。
-
@coderredoc 终身
-
@coderredoc 虽然:C11 标准草案 n1570:6.5.2.5 复合文字 5 复合文字的值是由初始化列表初始化的未命名对象的值。如果复合文字出现在函数体之外,则该对象具有静态存储持续时间;否则,它具有与封闭块关联的自动存储持续时间。
标签: c pointers compound-literals