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);**有人可以解释一下吗?我有一个代码,可以从用户输入中获取数组的元素。目前,我很难理解这部分代码到底做了什么
涉及三个概念:
scanf("%d", pointer)
方法将从stdin
中读取整数值(%d
)并将其写入pointer
引用的内存中。- 数组的性质:C 中的数组线性存储在内存中:大小为
n
的 int 数组在内存中只有n * sizeof(int)
个字节,数组的变量与指向其第一个元素的指针相同。 - 指针算术:
array + i
通过i
int 类型为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 个元素的指针。
函数中使用的格式%d
scanf
需要一个指向int
类型的对象的指针,此表达式array + i
使用指针算法生成指针。
表达式array[i]
等效于表达式*( array + i )
。
因此,表达式&array[i]
与&*( array + i )
相同,其中可以省略应用的运算符&*
,您将得到( array + i )
。