2017-07-17 48 views
5

这两个在C中有什么区别?第一个是指针数组。 我的主要困惑是关于第二个声明。它声明了什么。这两个不一样吗?int(* ar)[]声明在C中意味着什么?

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

int (*ar) []; 
+0

Sorry.Edited了这一点。谢谢。 – Neer

+2

[“将p声明为指向int的指针]](https://cdecl.org/?q=int+*p+%5B%5D),[”将ar声明为指向int数组的指针“](https:/ /cdecl.org/?q=int+%28*ar%29+%5B%5D) – kay

+0

看看[这个答案](https://stackoverflow.com/a/30345939/4265352)上的类似问题。 – axiac

回答

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 
+0

非常感谢,他们可以在函数中声明和使用吗(不在参数中)?如果不是那么为什么有一个范围可以在函数内部声明这样的东西。 – Neer

+0

@尼尔是的,他们可以。查看我的编辑例子。 – dbush

6

只需按照"right-left" rule

int *p []={&i,&j,&k}; //读取: “p是一个指针数组为int”

int (*ar) []; // “AR是一个指向整数数组”