谁能帮我看看这个c语言程序的执行过程嘛?
展开全部
这个,你首先注意3个知识点,1、数组名表示数组首地址。2、函数传递数组名是传址,函数内对数组地址操作,函数外的数组也会改变。3、p1++,p2--都是先取值再++--。
明白上面几点,剩下的就是跟着代码逻辑走。
w是字符数组首地址,m是字符串长度,所以p1=w;p2=w+m-1;这里p1初值是字符串首地址,p2是字符串最后一个字符的地址(也就是'G'的地址)。
也就是说初始p1在字符串左端,p2在字符串右端,while(p1<p2){...p1++....P2--}这里的循环就是每次p1往右移动,p2往左移动,一直到两者相遇或交错时停止循环(循环3次)。
以第一次循环为例,原码可改写成:s=*p1;p1=p1+1;p1=*p2;p2=p2-1;*p2=s;把p2指向的字符赋值给p1+1的字符,把p1指向的字符赋值给p2-1的字符地址。本次循环结束后p1指向第二个字符,p2指向倒数第二个字符,数组变为“AGCDEAG”
第二次循环同上:本次循环结束后p1指向第三个字符,p2指向倒数第三个字符,数组变为“AGADGAG”
第三次循环:本次循环结束后p1,p2都指向中间的字符,数组变为“AGAAGAG”。
循环结束。
明白上面几点,剩下的就是跟着代码逻辑走。
w是字符数组首地址,m是字符串长度,所以p1=w;p2=w+m-1;这里p1初值是字符串首地址,p2是字符串最后一个字符的地址(也就是'G'的地址)。
也就是说初始p1在字符串左端,p2在字符串右端,while(p1<p2){...p1++....P2--}这里的循环就是每次p1往右移动,p2往左移动,一直到两者相遇或交错时停止循环(循环3次)。
以第一次循环为例,原码可改写成:s=*p1;p1=p1+1;p1=*p2;p2=p2-1;*p2=s;把p2指向的字符赋值给p1+1的字符,把p1指向的字符赋值给p2-1的字符地址。本次循环结束后p1指向第二个字符,p2指向倒数第二个字符,数组变为“AGCDEAG”
第二次循环同上:本次循环结束后p1指向第三个字符,p2指向倒数第三个字符,数组变为“AGADGAG”
第三次循环:本次循环结束后p1,p2都指向中间的字符,数组变为“AGAAGAG”。
循环结束。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询