指向整数数组的指针

时间:2018-08-08 13:38:34

标签: c pointers

int *a[10]int (*a)[10]有什么区别?

我怀疑由于[]运算符的优先级高于*运算符, 第一种情况是一个由10个指针变量组成的数组,该变量存储整数的地址。
我不确定2 nd 的情况是什么,为什么?

2 个答案:

答案 0 :(得分:2)

int *a[10]a声明为指向int的10个指针的数组。
int (*a)[10]声明a为指向10个int数组的指针。

请记住以下两个规则来解密指针声明:

  • 始终从内而外读取声明:从最里面的括号开始(如果有的话)。找到要声明的标识符,然后从那里开始解密声明。

  • 有选择时,请始终将[]和()胜过* :如果*在标识符之前,[]在标识符之后,标识符表示数组,而不是指针。同样,如果*在标识符之前,()在标识符之后,则标识符表示函数,而不是指针。 (始终可以使用括号代替[]来取代()*的正常优先级)。

例如:

int *a[10];      "a is"  
     ^  

int *a[10];      "a is an array of 10"  
      ^^^^ 

int *a[10];      "a is an array of 10 pointers"
    ^

int *a[10];      "a is an array of 10 pointers to `int`".  
^^^      

答案 1 :(得分:1)

  • int *a [10]-正在声明一个名为a的10 int *个数组。

  • int (*a)[10]-正在声明一个名为a的指针,该指针指向10个int s数组。