以下声明的区别是什么:

int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);

理解更复杂的声明的一般规则是什么?


当前回答

在指向整数的指针中,如果指针是递增的,那么它将移动到下一个整数。

在指针数组中,如果指针增加,则跳转到下一个数组

其他回答

int *arr1[5]

在这个声明中,arr1是一个包含5个指向整数的指针的数组。 原因:方括号的优先级高于*(取消引用操作符)。 在这种类型中,行数是固定的(这里是5),但列数是可变的。

int (*arr2)[5]

在这个声明中,arr2是一个指向5个元素的整数数组的指针。 原因:这里,()括号的优先级高于[]。 在这种类型中,行数是可变的,但列数是固定的(这里是5)。

在指向整数的指针中,如果指针是递增的,那么它将移动到下一个整数。

在指针数组中,如果指针增加,则跳转到下一个数组

这里有一个有趣的网站,解释了如何在C语言中读取复杂类型: http://www.unixwiz.net/techtips/reading-cdecl.html

typedef int (*PointerToIntArray)[];
typedef int *ArrayOfIntPointers[];

我不知道它是否有一个正式的名字,但我称之为左右事物(TM)。

从变量开始,然后向右、向左、向右……等等。

int* arr1[8];

Arr1是一个包含8个指向整数的指针的数组。

int (*arr2)[8];

Arr2是一个指向8个整数数组的指针(括号块左右)。

int *(arr3[8]);

Arr3是一个包含8个指向整数的指针的数组。

这将帮助您处理复杂的声明。