谷歌问问首页 > 平板电脑 > 详细问题分析解答内容页

c语言中*p=a[i]为啥得不出结果

环球网用户在5个月前提交了关于“c语言中*p=a[i]为啥得不出结果”的提问,欢迎大家帮忙网友并涌跃发表自己的观点。#include<stdio.h>intmain(){inta[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);}return0;}把*p=a[i]换成p=&a[i]就可以了,这是为啥?期待您的回答,我不知道说什么才好,除了谢谢!
5个月前

2020-08-05最佳答案

第1个回答:

LV5个月前对于一位数组而言,用指针变量来访问数组元素与数组本身本质上是一样的。但对于指针,要接收数组的首地址,然后按照地址对数组中的元素进行间接寻址。*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]可以。还有问题吗,谢谢采纳追答:再举个例子补充一下:inta=3,*p;*p=a//error这个是错误的,原因就是:p是一个为初始化的一个随机指针,对一个没有初始化的指针进行*运算,这个是取值运算,这个都是错误的,根本就不能对这样的指针做任何操作,严重的有可能p指向了操作系统的一块内存,对它进行操作,系统都有可能挂掉的一般的,这样用inta=3,*p;p=&a;//a是已经分配了内存的一个int变量,对它进行取地址&运算,在给指针p进行初始化,


希望搜狗问问的回答,能够帮助到你。

热门分类提问

  • 手机数码 手机数码十大品牌,手机数码哪个品牌好。手机电脑等数码产品资讯,游戏资讯。

  • 商业理财 商业理财业务管理办法最新p2p公司排名年利率10%的商业理财