c语言。
#include<stdio.h>
#define M 3
#define N 4
int main()
{
int a[M][N],i,j,*p;
for(p=a[0],i=0;i<M;i++)
for(j=0;j<N;j++)scanf("%d",p++);
printf("begin=%o\nend=%o\n",a[0],p--);
printf("d=%d\n",p-a[0]);
return 0;
}
输出结果发现
end-begin=80或者280
distance始终为11。
哪位跟我解释以下为什么end-begin是那样?
那么为什么末元素地址和首元素地址的差值是80或者280呢?
追答在你的代码中,一共有12个元素,每个元素4字节,如果用末元素地址减去首元素地址只可能是11*4=44而不可能是什么80或280。你是怎么算的把代码贴上来吧!
正确啊!你用的是%o输出,这是八进制!printf("begin=%o\nend=%o\n",a[0],p--);这一句输出时p还没有减1,所以相差是12个元素,差就应该是48。你用八进制输出48不就是60吗?至于80我这里没有发现。你把printf("begin=%o\nend=%o\n",a[0],p--);改成十进制输出printf("begin=%d\nend=%d\n",a[0],p--);,相信就是48了……
追问好吧是我进制搞错了- -!!!!多谢指点 那么80那样的值为什么会出来呢...
追答我试了几次没有出现80!八进制不可能有8这个符号!