【发布时间】:2021-08-09 07:46:26
【问题描述】:
#include<stdio.h>
int main()
{
int n;
printf("Enter number of elements you want in array:");
scanf("%d",&n);
int arr[10],*a;
//taking input from user
for(int i=0;i<n;i++)
{
printf("Enter element %d: ",i);
scanf("%d",arr+i);
}
//stroing values in array and showing them on output screen
for (int i = 0; i < n; i++)
{
a=&arr[i];
printf("Element %d:",i);
printf("%d\n",*(arr+i));
}
}
输出:
Enter number of elements you want in array:4
Enter element 0: 5
Enter element 1: 6
Enter element 2: 7
Enter element 3: 8
Element 0:5
Element 1:6
Element 2:7
Element 3:8
上面的代码很容易显示输出,但下面粘贴的代码显示错误
#include<stdio.h>
int main()
{
int n;
printf("Enter number of elements you want in array:");
scanf("%d",&n);
int arr[10],*a;
//taking input from user
for(int i=0;i<n;i++)
{
printf("Enter element %d: ",i);
scanf("%d",&arr[i]);
}
//stroing values in array and showing them on output screen
for (int i = 0; i < n; i++)
{
a=&arr[i];
printf("Element %d:",i);
printf("%d\n",*(arr[i]));
}
}
输出:
tempCodeRunnerFile.c: In function 'main':
tempCodeRunnerFile.c:21:20: error: invalid type argument of unary '*' (have 'int')
21 | printf("%d\n",*(arr[i]));
| ^~~~~~~~~
为什么会这样,这段代码有什么问题,为什么上面的代码运行成功???
【问题讨论】:
-
arr[i]与arr + i不同。 -
arr[i]返回数组元素的内容,不需要使用*。 -
arr[i]等价于*(arr+i) -
arr+i等价于&arr[i] -
*(arr[i])表示“取消引用存储在arr[i]的地址”,但是arr[i]不是指针,而是整数。