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

http://img.mukewang.com/57b08a8b0001965406630358.jpg

求解答谢谢



Single丶love
浏览 1384回答 2
2回答

凌小天3635910

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.

快乐的时光

          如果你在你的程序里再有下面的定义语句的话 int *p=&a[3]; 那你使用 p[-2]就完全没问题了,因为它表示 a[1].         如果你定义了一个数组后,比如 int a[5]; 在内存中会为这个数组分配5个存储单元,此时如果你用这5个单元是完全没问题的,因为这5个已经被你申请了,而其他没被申请的单元是不能随便用的,比如 a[-2]是表示 a[0]前的两个单元(每个大小编译系统会根据你声明的数组元素的类型确定,在这个问题中每个单元都是 int型的),如果碰巧这个单元没被分配给其他变量时你使用会没有问题,但是如果已经被其他变量占据,那此时你使用就会出现问题,所以书上要求不能为负的是正确的,你的使用没问题是巧合。即使偶尔可以使用,也不要这样做,第一这样做没什么意义,第二会使程序存在潜在的隐患。
打开App,查看更多内容
随时随地看视频慕课网APP