有以下兩個程序,程序1中為什么*p將m的地址值傳遞給*s之后,*s又指向了k的地址值,到最后*p的所指向大的值還是不變呢?
程序2中為將i和j的地址值賦給*p和*q之后,再調用f函數,為什么他們所指向的地址的值又改變了呢,還有i,j不是實參嗎?怎么它們的值會改變呢?
這兩道題的區別是什么呢?怎么判斷指針所指的地址變還是不變呢,希望懂的老哥來指導一下,謝謝!
程序1:
#include <stdio.h>
int k=5;
void f(int*s)
{
s=&k;
}
main()
{
int m=3,*p=&m;
f(p);
printf("%d,%d\n",m,*p);
}
結果是輸出 3,3。
程序2:
#include <stdio.h>
int *f(int *s,int *t)
{
if(*s<*t)
*s=*t;
return s;
}
main()
{
int i=3,j=5,*p=&i,*q=&j,*r;
r=f(p,q);
printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);
}
結果輸出為 5,5,5,5,5
|