为了账号安全,请及时绑定邮箱和手机立即绑定

关于数组求值,求解答谢谢

关于数组求值,求解答谢谢

C
Single丶love 2016-08-14 23:13:37
求解答谢谢
查看完整描述

2 回答

已采纳
?
凌小天3635910

TA贡献17条经验 获得超13个赞

int a[]={5,15,34,54,12,2,52,72};   //创建一个整形数组,大小为8个整形
int *p=&a[5];                      //创建一个指针变量p,将数组a的第六个值所在的地址赋值给p,*p=2

printf("%d",*p[-2]);               //p[-2]等价于(p+(-2)),此时指向p地址向前数两位的a[3]。值为54.


查看完整回答
2 反对 回复 2016-08-15
?
快乐的时光

TA贡献79条经验 获得超48个赞

          如果你在你的程序里再有下面的定义语句的话 int *p=&a[3]; 那你使用 p[-2]就完全没问题了,因为它表示 a[1].

         如果你定义了一个数组后,比如 int a[5]; 在内存中会为这个数组分配5个存储单元,此时如果你用这5个单元是完全没问题的,因为这5个已经被你申请了,而其他没被申请的单元是不能随便用的,比如 a[-2]是表示 a[0]前的两个单元(每个大小编译系统会根据你声明的数组元素的类型确定,在这个问题中每个单元都是 int型的),如果碰巧这个单元没被分配给其他变量时你使用会没有问题,但是如果已经被其他变量占据,那此时你使用就会出现问题,所以书上要求不能为负的是正确的,你的使用没问题是巧合。即使偶尔可以使用,也不要这样做,第一这样做没什么意义,第二会使程序存在潜在的隐患。


查看完整回答
反对 回复 2016-08-14
  • 2 回答
  • 0 关注
  • 1387 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信