#include
<
stdio.h
>
#include < stdlib.h >
#define N 5
int * func( int * x, int * y)
{
static int t = 0 ;
if ( * x < * y)
{
t += * x;
printf( " %d\n " , t);
return x;
}
else
{
t += * y;
printf( " %d\n " , t);
return x;
}
}
int main( int argc, char * argv[])
{
int i;
int x = 3 ;
int * p, * q, * r;
q = & x;
for (i = 1 ; i <= N; i ++ )
{
p = & i;
r = func(p, q);
}
// i跳出循环时的值为6
printf( " %d, %d, %d\n " , * p, * q, * r);
// return 0;
system( " PAUSE " );
return 0 ;
}
#include < stdlib.h >
#define N 5
int * func( int * x, int * y)
{
static int t = 0 ;
if ( * x < * y)
{
t += * x;
printf( " %d\n " , t);
return x;
}
else
{
t += * y;
printf( " %d\n " , t);
return x;
}
}
int main( int argc, char * argv[])
{
int i;
int x = 3 ;
int * p, * q, * r;
q = & x;
for (i = 1 ; i <= N; i ++ )
{
p = & i;
r = func(p, q);
}
// i跳出循环时的值为6
printf( " %d, %d, %d\n " , * p, * q, * r);
// return 0;
system( " PAUSE " );
return 0 ;
}
输出结果:
1
3
6
9
12
6,3,6
解析:
static
int
t
=
0
;
这个好解释,c语言的static关键字,修饰函数里的局部变量,只运行第一次,以后调到函数,都不会运行它。
printf(
"
%d, %d, %d\n
"
,
*
p,
*
q,
*
r);
*p输出是6,这个好解释,前面循环了么,于是到6了。*q输出是3,不用解释。
*r也是6,而不是5?没错,因为循环完毕后,i的值是6,i的地址给指针p了,指针p指向的值就是6。