什么 scanf("%d", array + i);做

What scanf("%d", array + i); does

void get_elemnts(int *array, int max_index){
    for(int i = 0; i < max_index; i++){
        printf("enter element 0%d: ", i);
        scanf("%d", array + i);
    }
}

**scanf("%d", array + i);**有人能解释一下吗?我有一个代码可以从用户输入中获取数组的元素。目前我很难理解这部分代码到底做了什么

这个函数定义

void get_elemnts(int *array, int max_index){
    for(int i = 0; i < max_index; i++){
        printf("enter element 0%d: ", i);
        scanf("%d", array + i);
    }
}

等同于

void get_elemnts(int *array, int max_index){
    for(int i = 0; i < max_index; i++){
        printf("enter element 0%d: ", i);
        scanf("%d", &array[i] );
    }
}

这个表达式 array + i 给出了指向数组第 i 个元素的指针。

函数 scanf 中使用的格式 %d 需要指向类型 int 的对象的指针,并且此表达式 array + i 使用指针算法生成指针.

表达式 array[i] 等同于表达式 *( array + i ).

所以表达式 &array[i]&*( array + i ) 相同,其中应用的运算符 &* 可以省略,您将只得到 ( array + i ).

涉及三个概念:

  1. scanf("%d", pointer)方法将从stdin读取整数值(%d)并将其写入pointer.
  2. 引用的内存中
  3. 数组的性质:C中的数组在内存中线性存储:n大小的int数组在内存中只有n * sizeof(int)个字节,数组的变量与指向的指针相同它的第一个元素。
  4. 指针运算:array + i 将指针移动 i 个 int 类型的内存单元,即 i * sizeof(int) 个字节。这正是数组的第 i 个元素所在的位置。所以 array + i 是指向 array[i].
  5. 的指针