这两者在C中有什么区别。第一个是指针数组。 我的主要困惑是第二次宣言。这是什么声明。这两个不一样吗?
int *p []={&i,&j,&k};
int (*ar) [];
答案 0 :(得分:6)
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