他这个为什么执行fun()函数后,s的值没有变,仍只想a,可以详解一下吗。
函数中对指针指向的更改带不出函数。
要带出函数需要传递的参数类型是指针的指针,也就是char**s
使用fun(a,b,&s);
关于执行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',以表示字符串的结束。