猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
关于数组求值,求解答谢谢
求解答谢谢
Single丶love
浏览 1388
回答 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.
2
0
0
快乐的时光
如果你在你的程序里再有下面的定义语句的话 int *p=&a[3]; 那你使用 p[-2]就完全没问题了,因为它表示 a[1]. 如果你定义了一个数组后,比如 int a[5]; 在内存中会为这个数组分配5个存储单元,此时如果你用这5个单元是完全没问题的,因为这5个已经被你申请了,而其他没被申请的单元是不能随便用的,比如 a[-2]是表示 a[0]前的两个单元(每个大小编译系统会根据你声明的数组元素的类型确定,在这个问题中每个单元都是 int型的),如果碰巧这个单元没被分配给其他变量时你使用会没有问题,但是如果已经被其他变量占据,那此时你使用就会出现问题,所以书上要求不能为负的是正确的,你的使用没问题是巧合。即使偶尔可以使用,也不要这样做,第一这样做没什么意义,第二会使程序存在潜在的隐患。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续