c语言中*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]就可以了,这是为啥?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1个回答

对于一位数组而言,用指针变量来访问数组元素与数组本身本质上是一样的。但对于指针,要接收数组的首地址,然后按照地址对数组中的元素进行间接寻址。*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]可以。

还有问题吗,谢谢采纳


发布于 2020-02-11 22:48
查看更多
外卖券领取

相关问题

支持语音或者文本回复

语音最长一分钟

点击录音开始,最短不低于3秒