设有定义int a[]={1,3,5,7,9},*p=a; while(*p!=3) p++; 结果为7的表达式是: *(p+2)能否详细解释下
展开全部
int a[]={1,3,5,7,9},*p=a; //定义一个数组a,共五个元素;同时定义一个指针p指向数组a的首地址
p -> a[0]=1 即p是a[0]的地址
p+1 -> a[1]=3 p+1是a[1]的地址,下同
p+2 -> a[2]=5
p+3 -> a[3]=7
p+4 -> a[4]=9
while(*p!=3) p++; //*p是取地址中的内容(数据),当*p不是3时,p++完成向后移动一个数据
当*p==3时,p当前值为 原p+1 ,即指向a[1]
此时的p +1指向a[2]=5
所以,此时的p +2指向a[3]=7
即:*(p+2)==7
p -> a[0]=1 即p是a[0]的地址
p+1 -> a[1]=3 p+1是a[1]的地址,下同
p+2 -> a[2]=5
p+3 -> a[3]=7
p+4 -> a[4]=9
while(*p!=3) p++; //*p是取地址中的内容(数据),当*p不是3时,p++完成向后移动一个数据
当*p==3时,p当前值为 原p+1 ,即指向a[1]
此时的p +1指向a[2]=5
所以,此时的p +2指向a[3]=7
即:*(p+2)==7
追问
怎么确定的p当前值为p+1呢?
追答
再读一遍我的回答哦
展开全部
int a[]={1,3,5,7,9},
*p=a; // 将首个元素地址赋给p 此时*p=1
while(*p!=3)
{
p++; //做循环使p指向元素3的地址时停止 此时*p=3 p=&(a+2)
}
所以 结果为7的表达式是: *(p+2) 等价于 *(p+4)
*p=a; // 将首个元素地址赋给p 此时*p=1
while(*p!=3)
{
p++; //做循环使p指向元素3的地址时停止 此时*p=3 p=&(a+2)
}
所以 结果为7的表达式是: *(p+2) 等价于 *(p+4)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int a[]={1,3,5,7,9},*p=a; //p为指针,p指向int型数组a的首地址即 &a[0]
while(*p!=3) // *p 是p所指向的数组的元素 ,当*p 的值是3时退出while循环
p++; // p指向数组a的下一个元素。
当while循环结束时 p 指向 a[1]的地址,*p == a[1];
p+2 指向 a[1]下一个元素a[2]的下一个元素a[3],即p+2是指向a[3]的指针,所以*(p+2) 的值是7
while(*p!=3) // *p 是p所指向的数组的元素 ,当*p 的值是3时退出while循环
p++; // p指向数组a的下一个元素。
当while循环结束时 p 指向 a[1]的地址,*p == a[1];
p+2 指向 a[1]下一个元素a[2]的下一个元素a[3],即p+2是指向a[3]的指针,所以*(p+2) 的值是7
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
初始时p指向a数组的开始.
经过while(*p!=3) p++;
时p指向了3
所以p+2就是指向7这个位值.
经过while(*p!=3) p++;
时p指向了3
所以p+2就是指向7这个位值.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询