作业帮 > 综合 > 作业

void main() { int i=50,j=60,*p1=&i,*p2=&j; *p1++; printf("%d

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/27 17:15:24
void main() { int i=50,j=60,*p1=&i,*p2=&j; *p1++; printf("%d\n",*p1); (*p1)++; printf("%d\n",*p1);

为什么不是书上的60,61呢,是不是哪里出错了?
void main()
{
int ARRAY[]={50,60};
int *p1=&ARRAY[0],*p2=&ARRAY[1];
*p1++;
printf("%d\n",*p1);
(*p1)++;
printf("%d\n",*p1);
}
其实我对指针的理解是没有错的,可能是地址分配有问题吧,数组是连续的地址,换成数组就好了,但为什么前面输出的是地址呢,我用了*取值的呀!
你把i=50,j=60二者的位置调换一下,写成int j=60,i=50,就是书上的结果了.因为有些编译器是把先碰到的变量定义安排在高地址,而把后碰到的变量定义安排在低地址,且一般情况下是紧挨着的.而另一些编译器则相反……其中*p1++由于++是右结合的,所以是给p1++而不是给*p1作++,仅此而已.
再问: 按你说的改了,结果还是一样,我是这样子理解的,第一个结果是P1+1,也就是a的地址加1,然后取该地址的值.
再答: 年下面的图——
再问: 请问下第一个输出的是地址???
再答: 怎么会是地址?i被安排在最高地址处,那么p1++已不是你的代码所能控制的了,其中是一个随机数,在我这里打出来是1310656……