这是我的代码:
sortbyTV - Template Variable to sort by
sortdirTV - Order which to sort by when using sortbyTV
sortbyTVType - Specify the data type of the sortby TV. Possible values are string, integer, decimal, datetime
为什么我必须使用int main() {
int i,n, *arr;
scanf("%d", &n);
arr = (int *)malloc(sizeof(int)*n);
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
printf("%lld", sumOfArray(arr,n));
return 0;
}
?
我认为&arr[i]
时不需要它
属于arr
类型。
答案 0 :(得分:1)
scanf()
获取一个内存地址,它解析为一个将数据推送到的指针; arr
本身就是一个指针,但arr[i]
是一个int。因此,您需要将arr[i]
的地址传递给scanf()
答案 1 :(得分:1)
虽然arr
的类型为int *
,但这不是scanf
放置数据的地方。它将它放在arr[i]
中,类型为int
。因此,您需要传递该变量的地址,即&arr[i]
。
答案 2 :(得分:1)
使用&
获取对象的地址。
哪一个有意义?
scanf("%d", ...
需要int
的地址作为下一个参数。
&n
是int *
。好
int n;
scanf("%d", &n);
arr
是int *
。好。
int *arr = malloc(1 * sizeof(*arr));
scanf("%d", arr);
arr[i]
是int
:错误的
int *arr = malloc(n * sizeof(*arr));
for(i = 0; i < n; i++)
scanf("%d", arr[i]); // bad
&arr[i]
是int *
:好
int *arr = malloc(n * sizeof(*arr));
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
&arr[i]
是int *
:好
int arr[5];
for(i = 0; i < 5; i++)
scanf("%d", &arr[i]);
arr
是int
&#34;的&#34;数组1。因为它是一个数组,所以当传递给函数时,arr
将转换为其第一个元素的地址。这是int *
:好
int arr[1];
scanf("%d", arr);
&arr
是int
&#34;的&#34;数组1的地址。虽然它与&arr[0]
具有相同的值,但它不是int *
:错误
int arr[1];
scanf("%d", &arr); // Bad
结果 scanf("%d", ...
需要int *
个参数。
当传递的可修改对象转换为int
时,需要&
。
当传递的对象转换为int *
时,不需要&
。