3 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個贊
都說是形式參數(shù),被引用是不改變的
changeSeason被調(diào)用時 生成一個char* p 然后賦值讓 p=ps
再然后,在函數(shù)里面對p進(jìn)行什么操作都影響不了ps了,結(jié)果就沒有什么變化

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個贊
函數(shù)是值傳遞(單向傳遞,指針也是,即地址傳遞也是單向傳遞)
changeSeason(ps);將ps的地址傳遞給p
p++,p--是形參p的變化,與ps無關(guān),
p是函數(shù)另外新建的指針變量(調(diào)用函數(shù)創(chuàng)建,函數(shù)結(jié)束釋放)
類比int m,n=1;m=n; m++;不會影響n的變化一樣。
但(*p)++就有影響了。因?yàn)閜與ps指向地址相同,即"Spring"中‘S'的地址
*p與*ps就是字符'S',(*p)++等價于’S'++(當(dāng)然本題中是錯誤的,‘S'常量不能++),傳遞地址的作用就體現(xiàn)在*p的用法上(可以改變傳入地址指向的變量的值,相當(dāng)于間接改變變量)。

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個贊
當(dāng)調(diào)用changeSeason(ps);,你可以理解為ps這個指針的值,新建了一個副本傳給了(void changeSeason(char*p))這個里邊的p,p是一個ps的副本,而不是ps本身,所以p怎么運(yùn)算都沒有改變ps這個值本身。
不過可以對ps指向的對象進(jìn)行操作。不過這里你定義的數(shù)組不能用了。
#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';
}
這個時候輸出的結(jié)果是Apring
- 3 回答
- 0 關(guān)注
- 177 瀏覽
添加回答
舉報(bào)