当我不小心将括号括在指针上并且我的程序输出发生了变化时,我用C ++编写了一个代码。
由于我是编程新手,我想知道这些类型的指针之间的区别:
int* A[n];
int (*A)[n];
int *(A[n]);
我在教科书中读到数组也是一种指针。
答案 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
基本上,您可以根据以下优先级读出类型:
(经常括号内)最内层类型
最右边的类型(主要是数组类型:[])
最左边的类型,除了最外面的类型(主要是指针类型:*)
最外层的类型(大多数是原始类型:int,char ..)
例如,您提供的类型可以按如下方式读出:
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.
基本上,第一种和第三种相同。