处理数组时的语法?C

处理数组时的语法?C,c,arrays,C,Arrays,我试图理解下面显示的一段代码。我无法理解“数组+7”或“数组+3”的含义。它是否将数组中的第一个数字增加7/3 int array[8] = {1,2,4,8,16,32,64,128}; int *ptr_array[4]; int *dyn_array = malloc(sizof(int)*8); ptr_array[0] = array; ptr_array[1] = array +7; ptr_array[2] = array +3; ptr_array[3] = dyn_arra

我试图理解下面显示的一段代码。我无法理解“数组+7”或“数组+3”的含义。它是否将数组中的第一个数字增加7/3

int array[8] = {1,2,4,8,16,32,64,128}; 
int *ptr_array[4];
int *dyn_array = malloc(sizof(int)*8);

ptr_array[0] = array;
ptr_array[1] = array +7;
ptr_array[2] = array +3;
ptr_array[3] = dyn_array;

array+7
是指向数组八个元素的指针,它等于
&array[7]
,因为
x[y]
被定义为
*(x+y)

数组变量的名称在用作表达式时,可以衰减为指向数组第一个元素的指针。所以当你申报时

T a[10];
然后
a
可以衰减到
a[0]
的地址。实际上,无论何时使用订阅都会用到它:
a[i]
*(a+i)
相同,后者本身使用指针算术规则


因此,
a+7
是数组第八个元素的地址(如果数组只有七个元素,则可能是数组末尾的一个元素)。
array+7
表示数组第八个位置的地址。在这里,数组保存基址。因此,您可以通过
*(array+7)
array[7]
访问该数组的第8个元素