#include<stdio.h>
int main()
{
int a[5],i;
int *p;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{
*p=a[i];
printf("%d\n",*p);}
return 0;
}
把*p=a[i]换成p=&a[i]就可以了,这是为啥?
#include<stdio.h>
int main()
{
int a[5],i;
int *p;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{
*p=a[i];
printf("%d\n",*p);}
return 0;
}
把*p=a[i]换成p=&a[i]就可以了,这是为啥?
对于一位数组而言,用指针变量来访问数组元素与数组本身本质上是一样的。但对于指针,要接收数组的首地址,然后按照地址对数组中的元素进行间接寻址。*p表示取出p所指向的内存单元中的内容,需要让指针变量p指向数组的地址&a[i],这样才能可以取出来,而你*p=a[i]表示已经取出来的,没有贮存在p所指向的内存单元中,所以p实际上是个空地址,所以没有输出。而当p=&a[i],当i=0,让p指向的了&a[0]然后,才使p的内存单元中有内容,最后执行*p的时候,才有内容取出
因此,*p=a[i]不行,而p=&a[i]可以。
还有问题吗,谢谢采纳