但是在这个程序中
#include<stdio.h>
int *f(int *s,int *t)
{
int *k;
if(*s<*t)
{
k=s;
s=t;
t=k;
}
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);
}
为什么答案是3,5,3,5,5
不是5,3,5,3,5
但是在下面的这个程序中它又是怎么一回事呀?
#include<stdio.h>
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);
}
结果为7,5,5,3,3,3
不会改变实参的值,如果要改变,需要调用地址,即把
int *k;改为
int k;但是在下面的这个程序中他的值依然没有改变啦!
#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);
}
结果为7,5,5,3,3,3
int i=3,*p=&i,**r=&p;
这句来说p指向i,r指向p(r为指针的指针);
f(r);
经过这句,函数中的s也指向p(s也为指针的指针);
int *t=&k; //t指向k
s=&t; //s改变指针,现在s指向t
*s=&m; // *s改变的是t的指向,现在t指向m
故printf("%d,%d,%d,",k,*t,**s);
所输出的内容为k,m,m
printf("%d,%d,%d\n",i,*p,**r);
所输出的内容为i,i,i
故最后总的输出序列为:k,m,m,i,i,i =7, 5, 5, 3,3,3
程序中改变的只是指针变量的值。