猿问

这个函数的输出相当于没什么变化,我大约知道是这个结果,求解释具体的原理= =

#include<stdio.h>
void changeSeason(char*);
void main()
{
char *season[]={"Spring","Summer", "Autumn", "Winter"};
char *ps=season[0];
changeSeason(ps);
printf("Now the season is %s",ps);
}

void changeSeason(char*p)
{
p++;
++p;
}

哆啦的时光机
浏览 154回答 3
3回答

料青山看我应如是

都说是形式参数,被引用是不改变的changeSeason被调用时 生成一个char* p 然后赋值让 p=ps再然后,在函数里面对p进行什么操作都影响不了ps了,结果就没有什么变化

收到一只叮咚

函数是值传递(单向传递,指针也是,即地址传递也是单向传递)changeSeason(ps);将ps的地址传递给pp++,p--是形参p的变化,与ps无关,p是函数另外新建的指针变量(调用函数创建,函数结束释放)类比int m,n=1;m=n; m++;不会影响n的变化一样。但(*p)++就有影响了。因为p与ps指向地址相同,即"Spring"中‘S'的地址*p与*ps就是字符'S',(*p)++等价于’S'++(当然本题中是错误的,‘S'常量不能++),传递地址的作用就体现在*p的用法上(可以改变传入地址指向的变量的值,相当于间接改变变量)。

慕娘9325324

当调用changeSeason(ps);,你可以理解为ps这个指针的值,新建了一个副本传给了(void changeSeason(char*p))这个里边的p,p是一个ps的副本,而不是ps本身,所以p怎么运算都没有改变ps这个值本身。不过可以对ps指向的对象进行操作。不过这里你定义的数组不能用了。#include<stdio.h>void changeSeason(char*);void main(){char season[]= {"Spring"};char *ps=season;changeSeason(ps);printf("Now the season is %s",ps);}void changeSeason(char*p){*p = 'A';}这个时候输出的结果是Apring
随时随地看视频慕课网APP
我要回答