以下程序运行的结果是 。 #include<stdio.h> #include
以下程序运行的结果是。#include<stdio.h>#include<string.h>fun(char*w,intn){chart,*s1,*s2;s1=w;s2=...
以下程序运行的结果是 。
#include<stdio.h>
#include<string.h>
fun(char *w, int n)
{
char t,*s1,*s2;
s1=w; s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
void main()
{
char *p;
p=”1234567”;
fun(p, strlen(p));
puts(p);
}
A.7654321 B.1714171
C.1711717 D.7177171 展开
#include<stdio.h>
#include<string.h>
fun(char *w, int n)
{
char t,*s1,*s2;
s1=w; s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
void main()
{
char *p;
p=”1234567”;
fun(p, strlen(p));
puts(p);
}
A.7654321 B.1714171
C.1711717 D.7177171 展开
展开全部
#include<stdio.h>
#include<string.h>
//====== 函数部分=========
fun(char *w, int n)
{
char t,*s1,*s2; //定义字符t,字符指针s1,s2
s1=w; s2=w+n-1; //将上面的指针p赋予指针s1,s2是在s1右移7-1=6 实际*s2='7'
while(s1<s2) //当s1指向的地址,少于s2指向的地址时【偏移6个单位s2=s1+7-1】
{
t=*s1++; //s1先赋予t,那就是'1',后自增1
*s1=*s2--; //s2先赋予*s1那就是'7',此时*s1=='7' ,后自减1
*s2=t; //将t的值(也就是1)赋予*s2,此时*s2=='1'
}
/*
因为偏移量为6(s2=s1+6)假设s1=0x42201c则s2=0x422022
那么地址是这么存的:
内存地址 储存的数据(16进制) ASCII
0x42201c 0x31 '1' <- s1的指向 往下加6
0x42201d 0x32 '2'
0x42201e 0x33 '3'
0x42201f 0x34 '4'
0x422020 0x35 '5'
0x422021 0x36 '6'
0x422022 0x37 '7' <- s2的指向 +6后
由 t=*s1++ 可知 s1往下向s2靠近 由*s1=*s2--可知s2往上向s1 靠近
当s1==s2=0x42201f 时条件不再成立 (循环了3次)
第一次:
t=*s1='1' ;
s1++; 0x42201d '2'
*s1=*s2;0x42201d '2' 被*s2改写 0x42201d '7' *s2是等于'7'的
s2-- ; 0x422021 '6'
*s2=t; 0x422021 '6' 被t改写 0x422021 '1' t是等于'1'的
此时内存分布:
内存地址 储存的数据(16进制) ASCII
0x42201c 0x31 '1' 被*s2改写
0x42201d 0x37 '7' <- s1的指向 加1后
0x42201e 0x33 '3'
0x42201f 0x34 '4'
0x422020 0x35 '5'
0x422021 0x31 '1' <- s2的指向 减1后 被t改写
0x422022 0x37 '7'
第二次:
t=*s1='7'; //s1的内存值是:0x42201d '7'
s1++; 0x42201e '3'
*s1=*s2;0x42201e '3' 被*s2改写 0x42201e '1' *s2是等于'3'的
s2-- ; 0x422020 '7'
*s2=t; 0x422020 '5' 被t改写 0x422020 '7' t是等于'7'的
此时内存分布:
内存地址 储存的数据(16进制) ASCII
0x42201c 0x31 '1'
0x42201d 0x37 '7'
0x42201e 0x31 '1' <- s1的指向 加1后 被*s2改写
0x42201f 0x34 '4'
0x422020 0x37 '7' <- s2的指向 减1后 被t改写
0x422021 0x31 '1'
0x422022 0x37 '7'
第三次:
t=*s1='1'; //s1的内存值是:0x42201e '1'
s1++; 0x42201f '4'
*s1=*s2;0x42201f '4' 被*s2改写 0x42201f '7' *s2是等于'7'的
s2-- ; 0x42201f '7'
*s2=t; 0x42201f '7' 被t改写 0x42201f '1' t是等于'1'的
此时内存分布:
内存地址 储存的数据(16进制) ASCII
0x42201c 0x31 '1'
0x42201d 0x37 '7'
0x42201e 0x31 '1'
0x42201f 0x31 '1' <- s2的指向 <- s1的指向
0x422020 0x37 '7'
0x422021 0x31 '1'
0x422022 0x37 '7'
最后内存被改成这样,然后输出:
0x42201c~0x422022 '1711717'
*/
}
void main(){
char *p //字符指针
p="1234567" //将字符串 1234567 赋予 p
fun(p,strlen(p)) //分别将形参 指针p, 和p的长度传给func ,等价于func(0x10000000,7) 0x1000000是p的内存地址,7是p的长度
put(p);//输出p的内容
}
// C.1711717 纯手工打字, 学汇编的心血来潮写多了,写的不好望指正,写的好欢迎采纳,谢谢!
追问
嗯,好的,你答案对了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询