局部变量 局部变量 在语句块内(即{]内)定义的变量 形式参数也是局部变量 特点 定义时不会自动初始化,除非程序员指定初值 进入语句块时获得内存,仅能由语句块内语句 访问,退出语句块时释放内存,不再有效 并列语句块各自定义的同名变量互不干扰
6 局部变量 ▪ 局部变量 ▪ 在语句块内(即{ }内)定义的变量 ▪ 形式参数也是局部变量 ▪ 特点 ▪ 定义时不会自动初始化,除非程序员指定初值 ▪ 进入语句块时获得内存,仅能由语句块内语句 访问,退出语句块时释放内存,不再有效 ▪ 并列语句块各自定义的同名变量互不干扰
例运行结+是一个运算符,+表示 将j变量的值加1 maino I int i=1, j=2. prn"%dj=%,小) (int i=3, s printf("i=%d, a=%d\n", i, a) ++ int i=5; printf"i=yd\n,i: 运行结果为: printf(i=%d, j=%d \ n", i, j: 3,a=4 q) i=5
7 main() { int i=1,j=2; printf(″i=%d,j=%d\n ″,i,j); {int i=3,a=4; printf(″i=%d,a=%d\n ″ , i,a); j++; } {int i=5; printf(″i=%d\n ″,i); j++; } printf(″i=%d,j=%d\n ″,i,j); } 运行结果为: i=1,j=2 i=3,a=4 i=5 i=1,j=4 例,运行结果?++是一个运算符,j++表示 将j变量的值加1
例3-7,运行结果? Include <stdio. h> void swap( int x, int y):/函数声明x vor ain () I in prnt实参a,b的值没发生变化!函数之前 单向值传递 之后* 即由实参向形参的方向传递 /函数值而不会朝相反的方向! int temp. printf("215 a=%d/d\n" 体交换变值之前* temp=a:a=b;b=/p:∧交器:交换变量xy的值 prnt("22>a=%d.b=%d\n",a.b):/交换变量值之后*
8 例3-7,运行结果? #include <stdio.h> void swap(int x,int y); /* 函数声明 */ void main( ) { int a=3,b=5; printf("11>a=%d, b=%d\n",a,b);/* 调用交换函数之前 */ swap(a,b); /* 调用交换函数swap */ printf("12>a=%d, b=%d\n",a,b);/* 调用交换函数之后 */ } /* 函数定义:交换两个变量的值的函数 */ void swap(int a,int b) { int temp; printf("21> a=%d, b=%d\n",a,b); /* 交换变量值之前 */ temp=a; a=b; b=temp; /* 交换器:交换变量x,y的值 */ printf("22> a=%d, b=%d\n",a,b); /* 交换变量值之后 */ } 3 5 a b 3 5 a b temp 3 5 3 实参a,b的值没发生变化! 单向值传递! 即由实参向形参的方向传递 数值!而不会朝相反的方向!
全局变量 全局变量 在所有函数之外定义的变量 特点 默认作用范围:在源程序c中,从定义它的位置以 后都有效 在定义点之前或在其他c文件中引用,应该进行如 下声明: extern类型名变量名; 从程序运行起即占据内存,程序运行过程中可随时 访问,程序退出时释放内存 使函数之间的数据交换更容易,也更高效 但是尽量少用,因为谁都可以改写全局变量,所以很难确 定是谁改写了它 破坏了函数的独立性(封装性)
9 全局变量 ▪ 全局变量 ▪ 在所有函数之外定义的变量 ▪ 特点 ▪ 默认作用范围:在源程序.c中,从定义它的位置以 后都有效 ▪ 在定义点之前或在其他.c文件中引用,应该进行如 下声明: extern 类型名 变量名; ▪ 从程序运行起即占据内存,程序运行过程中可随时 访问,程序退出时释放内存 ▪ 使函数之间的数据交换更容易,也更高效 ▪ 但是尽量少用,因为谁都可以改写全局变量,所以很难确 定是谁改写了它 ▪ 破坏了函数的独立性(封装性)