我何时使用"&"在scanf()中?

时间:2015-08-31 20:50:28

标签: c pointers scanf

这是我的代码:

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类型。

3 个答案:

答案 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的地址作为下一个参数。

&nint *。好

int n;
scanf("%d", &n);

arrint *。好。

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]);

arrint&#34;的&#34;数组1。因为它是一个数组,所以当传递给函数时,arr将转换为其第一个元素的地址。这是int *:好

int arr[1];
scanf("%d", arr);

&arrint&#34;的&#34;数组1的地址。虽然它与&arr[0]具有相同的,但它不是int *:错误

int arr[1];
scanf("%d", &arr); // Bad

结果 scanf("%d", ...需要int *个参数。

  1. 当传递的可修改对象转换为int时,需要&

  2. 当传递的对象转换为int *时,不需要&