程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-求解C程序問題,f(r)後第二個printf結果為何是3,3,3呢?

c語言-求解C程序問題,f(r)後第二個printf結果為何是3,3,3呢?

編輯:編程綜合問答
求解C程序問題,f(r)後第二個printf結果為何是3,3,3呢?

#include
int k=7,m=5
void f(int **s)
{ int t=&k; _
_s=&t; _
_*s=&m; _
_printf("%d,%d,%d,",k,*t,
*s);}

main()
{ int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d\n",i,*p,**r);}
/*VC++程序運行結果:7,5,5,3,3,3*/
求解C程序問題,f(r)後第二個printf結果為何是3,3,3呢?r的地址調用函數f後不是改變了嗎?應該為5吧?p的地址也應該改變了吧?

最佳回答:


這個問題的關鍵在於函數f(int** s)並沒有修改s的地址,只是修改了s的值。你可以先把s看成一個普通變量,向函數中傳入一個普通變量會對這個普通變量的值產生影響嗎?事實上,除非你傳了這個變量的指針進去,否則不會對這個變量的值造成這個影響。
如果還是不明白,可以看下下面這段代碼:
#include
void f(int* p)
{
int i = 9;
p = &i;
}
int main()
{
int i = 10;
int *p = &i;
f(p);
printf("%d\n",*p)
getchar();
return 0;
}
打印出來的結果是10,因為p雖然作為指針傳進去了,但是在函數中只是對p的值進行了修改,p的地址並沒有變(p本身的地址沒變,而不是p指向的地址沒變)。基本上你只要能弄清指針指向的地址和指針本身的地址的區別這個問題就不難理解了(希望我沒有把你繞暈)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved