int(* ar)[]声明在C中的含义是什么?

时间:2017-07-17 12:22:26

标签: c arrays pointers variables

这两者在C中有什么区别。第一个是指针数组。 我的主要困惑是第二次宣言。这是什么声明。这两个不一样吗?

int *p []={&i,&j,&k};

int (*ar) [];

2 个答案:

答案 0 :(得分:6)

只需关注"right-left" rule

即可

int *p []={&i,&j,&k}; //读取:" p是一个指向int"

的指针数组

int (*ar) []; //" ar是指向一组int的指针"

答案 1 :(得分:4)

两者不一样。第二个是指向int 数组的指针。

将2D数组作为参数传递时,可以将此类声明用作函数参数。例如,给定此功能:

void f(int (*ar)[5])    // array size required here to do pointer arithmetic for 2D array
{
    ...
}

您可以这样称呼它:

int a[5][5];
f(a);

另一个作为本地参数的例子:

int a[5] = { 1,2,3,4,5 };
int (*ar)[];   // array size not required here since we point to a 1D array
int i;

ar = &a;
for (i=0;i<5;i++) {
    printf("a[%d]=%d\n", i, (*ar)[i]);
}

输出:

a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5