C指针的声明混乱

时间:2019-03-02 03:35:53

标签: c

这两个在C中的声明有什么区别?

  1. int (*p)(char (*a)[]);

  2. int *p(char (*a)[]);

1 个答案:

答案 0 :(得分:1)

对于inMemoryDatabaseBuilder

  • int (*p)(char (*a)[]);(*p)(char (*a)[])
  • 因此int是一个函数,它返回一个(*p)并接受一个int类型的参数。 (有关后者的更多信息。)
  • 所以char (*a)[]是相同的功能。
  • 因此*p是该函数的指针。
  • p中,char (*a)[](*a)[]
  • 所以char(*a)的数组,大小未知。
  • 所以char是同一数组。
  • 因此*a是指向a数组的指针,该数组的大小未知。
  • 因此char是指向返回p的函数的指针,该函数采用的参数是指向大小未知的int数组的指针。

对于char

  • int *p(char (*a)[]);*p(char (*a)[])
  • 所以int是指向p(char (*a)[])的指针。
  • 因此int是一个函数,它返回指向p的指针并采用类型int的参数。
  • 从上面我们知道参数是指向未知大小的char (*a)[]数组的指针。
  • 因此char是一个函数,该函数返回指向p的指针,并接受一个指向大小未知的int数组的指针的参数。