int a[] = {1,2,3,4,5,}; int *p = a; int *q = &a[5]; printf("%d", q-p);

2024-11-18 13:26:19
推荐回答(5个)
回答1:

main()
{ int a[]={1,2,3,4,5,6};
int *p;
p=a;
printf("%d ",*p); //数组a第一个元素是什么,是:1
printf("%d ",*(++p));//第2个元素是什么,是:2
printf("%d ",*++p); //第2个元素自增1是什么,是:3
printf("%d ",*(p--));//还是问第2个元素是几,但是上一个表达式后,第2个元素就成了:3
p+=3; //向后移动3个位置
printf("%d %d ",*p,*(a+3));//输出第5个元素是几:5 输出相对首地址偏移3个位置的元素:4 即a[3]
}

回答2:

main()
{ int a[]={1,2,3,4,5,6};
int *p;
p=a; //p指向的数组a
printf("%d ",*p); //*p指的是数组a的首地址的数据就是数组的第一个元素,是1
printf("%d ",*(++p));//*(++p)是先自加再用,p指向第一个元素,自加1后就是指向第二个元素,是2
printf("%d ",*++p); //因为p已经指向的第二个元素,再自加1就是第三个元素,是3
printf("%d ",*(p--));//p--是先用再自减,所以输出是3,然后p自身再做自减1,
p+=3; //上一步p自减一后指向第二个元素,再后移3个元素就是5
printf("%d %d ",*p,*(a+3));/*(a+3)就是a[3]就是第4个元素就是4
}

回答3:

如果指针变量p1和p2都指向同一数组中的元素,若执行p2-p1,结果是p2-p1的值(两个地址之差)除以数组元素的长度。5*4(int字节为4时)/4=5

回答4:

答案是5

回答5:

q-p 求的是存储单元个数差5;(int)q-(int) p求的是字节数差20