以下声明的区别是什么:
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
理解更复杂的声明的一般规则是什么?
以下声明的区别是什么:
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
理解更复杂的声明的一般规则是什么?
当前回答
根据经验,右一元操作符(如[]、()等)优先于左一元操作符。因此,int *(*ptr)()[];将是指向一个函数的指针,该函数返回一个指向int的指针数组(在括号之外尽快获得正确的操作符)
其他回答
我认为我们可以使用简单的规则。
example int * (*ptr)()[];
start from ptr
PTR是指向的指针 向右走。它是")"现在向左,它是"(" 出来向右走”()“所以 指向一个不接受参数" go left "并返回一个" go right "指向的指针的函数 由整数“向左”组成的数组。
int *arr1[5]
在这个声明中,arr1是一个包含5个指向整数的指针的数组。 原因:方括号的优先级高于*(取消引用操作符)。 在这种类型中,行数是固定的(这里是5),但列数是可变的。
int (*arr2)[5]
在这个声明中,arr2是一个指向5个元素的整数数组的指针。 原因:这里,()括号的优先级高于[]。 在这种类型中,行数是可变的,但列数是固定的(这里是5)。
int *a[4]; // Array of 4 pointers to int
int (*a)[4]; //a is a pointer to an integer array of size 4
int (*a[8])[5]; //a is an array of pointers to integer array of size 5
在指向整数的指针中,如果指针是递增的,那么它将移动到下一个整数。
在指针数组中,如果指针增加,则跳转到下一个数组
typedef int (*PointerToIntArray)[];
typedef int *ArrayOfIntPointers[];