標(biāo)題: 在網(wǎng)上看到一道C語言指針題,求分析 [打印本頁]

作者: 19970623    時間: 2019-9-27 15:37
標(biāo)題: 在網(wǎng)上看到一道C語言指針題,求分析
#include<stdio.h>
int *p;
main()
{
int a=1,b=2,c=3;
p=&b;
pp(a+c,&b);
        printf("(1) %d %d %d\n",a,b,*p);
}
pp(int a,int *b)
{
int c=4;
*p =*b+c;
a=*p-c;
        printf("(2) %d %d %d\n",a,*b,*p);
}
結(jié)果是: (2) 2 6 6
            (1) 1 6 6




我認(rèn)為是 (2) 2 2 6
              (1) 1 2 6


大家說說看。

作者: csmyldl    時間: 2019-9-27 18:01
(2) 2 6 6
(1) 1 6 6
這個結(jié)果是對的
作者: csmyldl    時間: 2019-9-27 18:07
主程序調(diào)用pp(a+c,&b);時 即pp(4,2);  在子程序中*p=2+4=6 , a=6-4=2 ,子程序中的*b是b變量的地址,通過這一條語句*p =*b+c;已經(jīng)改變?yōu)?了
作者: dongxx    時間: 2019-9-27 19:13
我沒仔細(xì)看代碼,但我看到p=&b;而且沒有其它地方對p進(jìn)行賦值,即p中存的是b的地址,所以*p和b的值應(yīng)該是相同的,所以你的記過應(yīng)該不對。
作者: dongxx    時間: 2019-9-27 19:15
還有你提問時,你說你認(rèn)為結(jié)果是什么,你應(yīng)該把你這么認(rèn)為的原因也寫出來,方便別人給你分析,如果有問題更容易指出來。
作者: CTW.    時間: 2019-9-27 20:01
我得到的結(jié)果也是
(2) 2 6 6
(1) 1 6 6
看了樓主的結(jié)果,只能說樓主對指針理解的不夠透徹

作者: 黃youhui    時間: 2019-9-27 21:38
你p=&b的時候就已經(jīng)確認(rèn)國*p=b關(guān)系了,
作者: cuihaodianzi    時間: 2019-9-27 22:56
我這個人比較懶,不喜歡算算算……

20190927225216.png (2.33 KB, 下載次數(shù): 72)

就這樣啊

就這樣啊

作者: jianfeii    時間: 2019-9-28 00:22
主要是取了地址,進(jìn)入函數(shù)以后一起改變了,所以答案是沒錯的
作者: 叫我紅領(lǐng)巾    時間: 2019-9-28 10:59
有圖有真相

1.png (2.33 KB, 下載次數(shù): 49)

1.png

作者: 多少分多少分    時間: 2019-9-28 11:05
指針指向了那個變量,所以是266和126




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1