C语言中的一道例题,谁能帮忙详细解释一下每一步的含义?

2025-03-01 05:24:00
推荐回答(2个)
回答1:

输出为: bcdefgha
解释:
char *ss( char *s) 函数ss 返回一个指向字符串的指针;函数参数 s 是一个指向字符串的指针
这样,在main 中调用 ss(str)后,s指向了str的首元素,也就是“abcdefgh"中的 ‘a'
char *p, t //定义一个char 指针 p 和一个char 变量 t
p = s+1 p指向s的第二个元素 , 及 p 指向了 'b'
t = *s // 取出第一个元素 'a' 存放到变量 t
while(*p) {} 这是一个循环, 循环结束条件为*p == null ,或者当 *p != null 就循环。注意:*p==null表示遇到字符串结尾;
循环体:*(p-1) = *p; p++; 将每个字符前一次,就是将 二个元素移动第一,第三个移动到第二....以此类推。
最后 *(p-1) =t 将第一个元素移动到最后
另外:注意 char str[10] = "abcdefgh" ,意思是 定义了10个char元素数组,并初始化前8个元素;剩下的str[8]和str[9]被初始化为0,就是 null字符
j

回答2:

#include
       char *ss(char *s)
       {
            /*函数实现的功能为将s的每一位的值赋给低位,将最低位赋给最高位值*/
              char *p,t;
             p=s+1; // p指向地址指向s指针所指地址加1的位置
             t=*s;//指针s所指向的地址的内容赋给变量t
              while(*p)//当p所指向的地址中的内容不为空则执行
              {
         *(p-1)=*p; //将p所指向的内容赋给p-1地址 
         p++; //地址p指向p+1的地址 
       }
        *(p-1)=t;// 此时p-1刚好为s的最后一位,将t中值赋给p-1
的地址 
        return s;
   }
       main()
       {
              char *p,str[10]="abcdefgh";
              p=ss(str);
              printf("%s\n",p);
       }

       输出结果:bcdefgha