c语言 - 什么扫描( "%d" , 数组 + 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);
}
}

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

涉及三个概念:

  1. scanf("%d", pointer)方法将从stdin中读取整数值(%d)并将其写入pointer引用的内存中。
  2. 数组的性质:C 中的数组线性存储在内存中:大小为n的 int 数组在内存中只有n * sizeof(int)个字节,数组的变量与指向其第一个元素的指针相同。
  3. 指针算术:array + i通过iint 类型为i * sizeof(int)字节的存储单元来移动指针。这正是数组的第 i 个元素所在的地方。所以array + i是指向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 个元素的指针。

函数中使用的格式%dscanf需要一个指向int类型的对象的指针,此表达式array + i使用指针算法生成指针。

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

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

相关内容

  • 没有找到相关文章

最新更新