【发布时间】:2022-01-25 05:55:26
【问题描述】:
我有一个练习告诉我只使用指针将元素输入到数组中。 于是我在 WEB 中寻找解决方案(https://codeforwin.org/2017/11/c-program-input-print-array-elements-using-pointers.html)
#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size
int main()
{
int arr[MAX_SIZE];
int N, i;
int * ptr = arr; // Pointer to arr[0]
printf("Enter size of array: ");
scanf("%d", &N);
printf("Enter elements in array:\n");
for (i = 0; i < N; i++)
{
scanf("%d", ptr);
// Move pointer to next array element
ptr++;
}
// Make sure that pointer again points back to first array element
ptr = arr;
printf("Array elements: ");
for (i = 0; i < N; i++)
{
// Print value pointed by the pointer
printf("%d, ", *ptr);
// Move pointer to next array element
ptr++;
}
return 0;
}
我无法理解这一行:
for (i = 0; i < N; i++)
{
scanf("%d", ptr);
// Move pointer to next array element
ptr++;
}
为什么我们使用 ptr 而不用 (*ptr) 取消引用它。 ptr 是自 ptr = arr 以来的地址。当我们使用scanf 时,我们输入的是一个值(int 或double 或float)而不是地址,那么为什么那个指针没有*?
谢谢。
【问题讨论】:
-
"当我们使用 scanf 时,我们输入一个值(int 或 double 或 float)而不是地址" 不,我们没有。
scanf的参数是指针。这是您代码前面的内容:scanf("%d", &N);
标签: c pointers input dereference