计算机二级C语言(每日一题)

他这个为什么执行fun()函数后,s的值没有变,仍只想a,可以详解一下吗。

img

函数中对指针指向的更改带不出函数。
要带出函数需要传递的参数类型是指针的指针,也就是char**s
使用fun(a,b,&s);

  • 建议你看下这篇博客👉 :字符串筛选:编写函数fun,其功能是将字符串s下标为奇数的字符删除,字符串中剩余字符形成的新字符串放在数组t中。
  • 以下回答由chatgpt基于相关博客总结生成:

    关于执行fun()函数后,s的值为什么没有变化,仍然只有a的问题,可能是由于传入fun()函数的指针a和指针s指向的内存地址不同,虽然在函数中对指针进行了操作,但并没有修改指针所指向的地址内存中的值,在函数结束后,指针所指向的内存地址中的值并没有发生变化。若想要修改实参指针所指向的内存地址中的值,可以将fun()函数的形参改为指向指针的指针(即char a, char s),并在函数中通过二级指针访问指针所指向的地址中的值进行修改。具体代码如下:

    #include <stdio.h>
    #define N 20
    void main(){
         char s1[N];
         char *s2="abcdefghijk";
         fun(&s1,&s2); // 将指向指针的指针传入函数
         printf("%s\n",s1); // 输出s1的值
         printf("%s\n",s2); // 输出s2的值
    }
    void fun(char **a,char **s){ // 修改函数的形参为指向指针的指针
        char *t = *a; // 用t临时指向指针a的地址
        while(**s != '\0'){ // 对指针s所指向的地址中的值进行操作
            *t = **s;
            t++;
            (*s)++;
        }
        *t='\0'; // 在最后一个字符后添加'\0'
    }
    

    其中,对于指向指针的指针进行操作时,需要用到二级指针访问指针所指向的地址中的值,即a和s。在操作完后,需要在最后一个字符后添加'\0',以表示字符串的结束。