#include <stdio.h>
int main(void)
{
char ac [] = {0,1,2,3,4,5,6,7,8,9, };
char * p= &ac[0];
char *p1=&ac [5];
/*问题如下
1.我知道char *p=ac等价于char *p=&ac【0】;
但是
char *p=ac等价于char *p=ac【0】吗?这两句话区别是&号。
char *p=ac【0】char *p=&ac【0】这两句的意思一样吗?
*/
printf("p =%p\n", p);
printf ("p+1=sp\n" ,p+1);
printf("p1-p=%d\n",p1-p);
/*2.指针P等于数组里的0,指针p1等于4,
p1-p为什么不是4?
*/
int ai[]= {0,1,2,3,4,5,6,7,8,9,};
int *q = ai;
int *q1 = &ai[6]; //[6]=5?
printf("'q=%p\n", q);
printf ("q1=%p\n",q1);
printf("q1-q=%d\n”,q1-q);
return 0;
}
3 &ac【5】是第五个数字,也就是数组里的4。为什么课程里说&ac【0】至&ac【5】之间差了五?
4.(此问题已经解决)
我认为ac【0】代表数组中的0,ac【1】也代表数组里的0。第0个数和第一个数,这该怎么理解?我突然想不通了,这该怎么理解?
答:
向丹塞妍
int a[5];中的那个5表示这个数组最多可以包含五个元素,在引用的时候是a[0]~a4,这5个元素,至于a[5],对于这个定义是的使用是非法的,因为他使用了超出数组申请空间以外的空间,就好比使用了不属于自己的东西(使用别人的是违法的)。若你使用a[5]的话,不一定会出现什么效果,可能在你看来会是正常的效果,但实际上是不正常的行为。
内存示意图上该怎么理解呢?万分感谢解惑
5.csdn提问违禁词为什么有这个..