这些类型的指针有什么区别?

时间:2016-02-22 08:36:06

标签: c++ arrays pointers

当我不小心将括号括在指针上并且我的程序输出发生了变化时,我用C ++编写了一个代码。

由于我是编程新手,我想知道这些类型的指针之间的区别:

int* A[n]; 
int (*A)[n];
int *(A[n]);

我在教科书中读到数组也是一种指针。

2 个答案:

答案 0 :(得分:15)

int* A[n];

无论元素是什么类型,第一个也是最重要的是数组。在应用指针*之后,我们知道A是一个int指针数组。

int (*A)[n];

通过应用括号,在这种情况下,指针*优先于array []。然后A首先是一个指针,无论它指向什么。在应用array []之后,我们知道A是指向int数组的指针。

int *(A[n]);

Brackets不会更改任何会影响数组[]的优先顺序,因此删除括号与第一种情况相同int* A[n]

Are array pointers?

没有。 Array是一种数据结构,它分配内存池并按顺序存储数据,其中指针指向内存池中的特定索引,并引用存储在该内存位置的数据。

答案 1 :(得分:2)

本文包含在C中读取类型声明的好例子。 http://www.unixwiz.net/techtips/reading-cdecl.html

基本上,您可以根据以下优先级读出类型:

  1. (经常括号内)最内层类型

  2. 最右边的类型(主要是数组类型:[])

  3. 最左边的类型,除了最外面的类型(主要是指针类型:*)

  4. 最外层的类型(大多数是原始类型:int,char ..)

  5. 例如,您提供的类型可以按如下方式读出:

    int* A[n];  // An array ([n]) of pointer (*) of int.
    int (*A)[n];  // A pointer (*) of array ([n]) of int.
    int *(A[n]);  // An array ([n]) of pointer (*) of int.
    

    基本上,第一种和第三种相同。