本帖最后由 jackz007 于 2024-4-24 16:29 编辑
之所以只打印出 2 个数值,那是因为在main() 中看似有 20 次的循环,实际上只发生了 2 次,因此,也只有 2 次的 f() 调用。#include<stdio.h>
int f(int * x)
{
int i ;
* x = 0 ;
for (i = 1 ; i <= 3 ; i ++) // 这个 i 只管循环 3 次,与循环体内用于计算 * x 的 i 是两个变量
{
static int i = 1 ; // 这个 i 是静态变量,其值会始终存在,与循环变量 i 是两个变量
int j = 2 ; // 变量 j 会在每次循环中被初始化为 2
* x += i + j ;
i ++ ;
j ++ ; // 垃圾语句,不起任何的作用
}
return * x ;
}
/*
【第 1 次调用 f()】:
* x = * x + i + j
----------------------
* x = 0 + 1 + 2 = 3
* x = 3 + 2 + 2 = 7
* x = 7 + 3 + 2 = 12
返回 * x = 12
*/
/*
【第 2 次调用 f()】:
* x = * x + i + j
----------------------
* x = 0 + 4 + 2 = 6
* x = 6 + 5 + 2 = 13
* x = 13 + 6 + 2 = 21
返回 * x = 21
*/
int main(void)
{
int i;
for (i=0;i<20;i++)
printf("%d\t",f(&i)) ; // 传入 f() 的参数是指向 i 的指针,这就意味着可以在 f() 中对 i 的数值进行修改
return 0;
}
/*
【第 1 次调用 f()】:
返回 12,于是,打印出 12,同时,作为循环变量的 i 被修改为 12,13 < 20 的循环条件成立,再次调用 f()
【第 2 次调用 f()】:
返回 21,于是,打印出 21,同时,作为循环变量的 i 被修改为 21,22 < 20 的循环条件不成立,循环结束。
*/
|