【发布时间】:2019-12-10 14:47:47
【问题描述】:
我了解在 C 编程中,'scanf' 与 '&' 一起用于除字符串之外的所有变量类型(int、float、char、..)。这是我的程序代码。在'scanf'前面,为什么不需要'&'?我可以了解更多有关 scanf 的信息吗?
#include <stdio.h>
#define M 10
int main()
{
int i, n, sum = 0;
int a[M];
do{
printf("Input a positive number less than %d \n",M);
scanf("%d", &n);
}while (!(n >0 && n < M));
printf("Input %d numbers \n",n);
for(i=0; i<n ; i++){
scanf("%d",(a+i));
sum += *(a+i);
}
printf("Sum = %d \n",sum);
}
【问题讨论】:
-
a + i是一个地址;*(a + i)是一个值。如果你想使用&,你可以这样做:scanf("%d",&a[i]);,我想大多数人会更喜欢。 -
a是一个数组...scanf("%d",(a+i));或scanf("%d",&a[i]);...顺便说一句,您应该先学习c,然后才能开始思考类似我明白在C 编程中, 'scanf' 与 '&' 一起用于所有变量类型(int、float、char、..) -
@FiddlingBits Beauty 在旁观者的眼中,但我永远无法理解为什么一个人会取消引用一个指针来获取一个对象 (
a[i]) 只是为了让一个人可以获得指向刚刚通过取消引用该指针获得的对象。&a[i]是&(*(a+i)),这显然是无意义的。 -
@Peter-ReinstateMonica 最终结果(机器代码)可能是相同的。我认为清晰是最重要的。
-
@FiddlingBits 我认为减少冗余会更清晰。