繁体   English   中英

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

[英]What is the meaning of “p = (int[2]){*p};” line in C pointer?

据我了解,我正在将变量a的地址传递给函数int ffx1

之后,这行p = (int[2]){*p};到底是什么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 ffx1(int * p)p是指向int的指针。

(int[2]){*p}是一个复合文字,它定义了一个2的int数组。 @BLUEPIXY这个未命名的数组我们称为X[2] 它的第一个元素的值为*p ,而下一个元素为int ,由于未明确列出,因此将被初始化为零(第6.7.9 21和10节)。

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

return p[1]取消引用p ,返回X[1]0

它是复合文字指针

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

实施例2相反,在

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

p分配了两个整数的数组的第一个元素的地址,第一个具有先前由p指向的值,第二个为零。 该复合文字中的表达式不必是常数。 未命名对象具有自动存储期限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM