这两个在C中有什么区别?第一个是指针数组。 我的主要困惑是关于第二个声明。它声明了什么。这两个不一样吗?int(* ar)[]声明在C中意味着什么?
int *p []={&i,&j,&k};
int (*ar) [];
这两个在C中有什么区别?第一个是指针数组。 我的主要困惑是关于第二个声明。它声明了什么。这两个不一样吗?int(* ar)[]声明在C中意味着什么?
int *p []={&i,&j,&k};
int (*ar) [];
两者并不相同。第二个是指向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
Sorry.Edited了这一点。谢谢。 – Neer
[“将p声明为指向int的指针]](https://cdecl.org/?q=int+*p+%5B%5D),[”将ar声明为指向int数组的指针“](https:/ /cdecl.org/?q=int+%28*ar%29+%5B%5D) – kay
看看[这个答案](https://stackoverflow.com/a/30345939/4265352)上的类似问题。 – axiac