第9章变量的属性和编译预处理.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * 第9章 变量的属性和编译预处理 * xx 2021-1-20 基本概念 变量都有自己的作用域,按照作用域的范围可分为两种:局部变量和全局变量。 在函数内声明的变量是局部变量,它只在本函数内有效。 局部变量的说明如下: (1)main函数内声明的变量也只在main函数内有效,main函数不能使用其他函数中声明的局部变量。 (2)不同函数内可以声明同名的局部变量,它们代表不同的对象,互不干扰。 (3)形参也是局部变量。 9.1 变量的作用域 * xx 2021-1-20 【例9.1】 不同函数中使用同名的局部变量。 #include <stdio.h> void swap(int x, int y); int main(void) { int x = 3, y = 5; swap(x, y); printf("x = %d\n", x); printf("y = %d\n", y); return 0; } void swap(int x, int y) { int t; t = x; x = y; y = t; } 9.1 变量的作用域 * xx 2021-1-20 该程序的运行情况及结果: x = 3 y = 5 实参向形参的传递是单向的,修改形参的值,实参的值不受影响,即使实参与形参同名,修改形参的值,实参的值依然不受影响,实参x、y是main函数的局部变量,形参x、y是函数swap的局部变量。 9.1 变量的作用域 * xx 2021-1-20 【例9.2】 形参是局部变量。 #include <stdio.h> void eval(int n); int main(void) { eval(6); printf("\n"); return 0; } void eval(int n) { if (n / 2 > 0) eval(n / 2); printf("%d ", n); } 9.1 变量的作用域 * xx 2021-1-20 该程序的运行情况及结果: 1 3 6 三次eval函数的递归调用中,形参n是每次调用eval函数时的局部变量,三个n互不干扰。 9.1 变量的作用域 * xx 2021-1-20 【例9.3】 局部变量和复合语句内的局部变量同名。 #include <stdio.h> int main(void) { int i = 2, j = 3, k; k = i + j; { int k = 8; printf("k = %d\n", k); } printf("k = %d\n", k); return 0; } 9.1 变量的作用域 * xx 2021-1-20 该程序的运行情况及结果: k = 8 k = 5 main函数内声明了i、j、k三个变量,在复合语句内又声明了一个变量k,两个k不是同一个变量。在复合语句外由main函数内声明的k起作用,而在复合语句内则由复合语句内声明的k起作用。 9.1 变量的作用域 * xx 2021-1-20 基本概念 在函数之外声明的变量称为全局变量。全局变量的作用范围是从声明变量的位置到本源文件的末尾。 全局变量的说明如下: (1)全局变量增加了函数间数据联系的渠道。 (2)如果全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被屏蔽,不起作用。 9.1 变量的作用域 * xx 2021-1-20 【例9.4】 输入10个数,计算并输出最高分、最低分和平均分。 #include <stdio.h> double max = 0, min =0; // 全局变量 double average(int n, double score[ ]); int main(void) { int i; double aver, score[10]; printf("Input 10 numbers: "); for (i = 0; i < 10; i++) scanf("%lf", &score[i]); aver = average(10, score); printf("max = %6.2f\nmin = %6.2f\naver = %6.2f\n", max, min, ave

文档评论(0)

jj168 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档