4.作用域规则

标示符只能在说明或对他定义它的函数体或分程序内饰可见的,而在该函数体或分程序外则是不可见的。

举个例子:

# include <stdio.h>

int main()

{

int a=2,b=4,c=6;

printf("%d,%d,%d\n",a,b,c);  //2,4,6

{

int b=8;

float c=8.8;

printf("%d,%d,%.1f\n",a,b,c);   //2,8,8.8

a=b;

{

int c;

c=b;

printf("%d,%d,%d\n",a,b,c);  //8,8,8

}

printf("%d,%d,%.1f\n",a,b,c);   //8,8,8.8

}

printf("%d,%d,%d\n",a,b,c);  //8,4,6

getchar();

}

结果为:

5.存储类

存储类分为:

自动存储(auto)、寄存器存储(register)、外部类变量(extern)、静态类变量(static)

我们下面来举几个例子说明一下不同存储类变量的定义和特性。

1)局部变量的定义和应用:

# include <stdio.h>

int main()

{

void other();

int a;

register int b;

static int c;

a=6;

b=9;

printf("a=%d,b=%d,c=%d\n",a,b,c);

other();

other();

printf("a=%d,b=%d,c=%d\n",a,b,c);

getchar();getchar();

}

void other()

{

int a=6;

static int b=10;

a+=100;

b+=200;

printf("a=%d,b=%d\n",a,b);

}

结果为:

简单讲一下:(main函数中定义了自动变量a,寄存器类变量b和内部静态类变量c,在函、数other()中,定义了一个自动变量a和内部静态变量b,(函数名与main中相同,但不影响,因为他们作用范围在各自的函数体内。)第一次调用other()函数时,输出a和b的值分别为106和210,由于这里变量b是内部静态类的,其寿命长,在退出other()函数后仍然保存其值不被释放。由于b变量的值被保存,在第二次调用other()函数时,因为静态变量仅在编译时初始化,因此b保留上次调用后的值在经过b+=200)。

2)全局变量和局部变量的应用

# include <stdio.h>

int main()

{ void other();

extern int i;

int a=0;

static int b;

printf("i=%d,a=%d,b=%d\n",i,a,b);

a+=5;

other();

printf("i=%d,a=%d,b=%d\n",i,a,b);

i+=10;

other();

getchar();

}

int i=7;

void other()

{

static int a=2;

int b=5;

i+=5;

a+=3;

b+=1;

printf("i=%d,a=%d,b=%d\n",i,a,b);

}

结果为:

讲一下(由于外部变量i定义在主函数后,在主函数要引用i时,必须要用extern int i,语句进行说明,因为i在mian和other两个函数中均可见,所以i值无论在main函数或是other中改变都是有效的,对后面的操作均有影响)。

3)多文件程序中的作用域

# include <stdio.h> //主程序

int i;

void fun1(),fun2(),fun3();

int main()

{

i=33;

fun1();

printf("main():i=%d\n",i);

fun2();

printf("main():i=%d\n",i);

fun3();

printf("main():i=%d\n",i);

getchar();

} //主程序

# include <stdio.h> //fun1

static int i;

void fun1()

{

i=100;

printf("fun1():i=(staic)=%d\n",i);

} // fun1

# include <stdio.h> //fun2

void fun2()

{

int i=5;

printf("fun():i(auto)=%d\n",i);

if(i)

{

extern int i;

printf("fun2():i(extern)=%d\n",i);

}

}

extern int i;

void fun3()

{

i=20;

printf("fun3():i(extern)=%d\n",i);

if(i)

{

int i=10;

printf("fun3():i(auto)=%d\n",i);

}

} //fun2

结果为:

解释一下(在分程序中重新定义了变量b和c并赋初值,这时函数体外定义的b和c被隐藏起来,重新定义的b和c在起作用,a被重新复制,而非被重新定义)

转载于:https://blog.51cto.com/2948229/1161838

C语言基础教程读书笔记5.2.(第五章函数和存储类2)相关推荐

  1. C语言基础教程读书笔记2(第二章常量、变量、类型转换)

    第二章常量.变量.类型转换<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  2. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  3. python基础语言与应用第五章_Python基础教程读书笔记(第5章—第6章:条件、循环和其他语句;抽象)...

    第五章:条件.循环和其他语句 1:print 和 import 的更多信息 1)使用逗号输出--打印多个表达式,只要将它们用逗号隔开就行: >>> print('Age:',42) ...

  4. 嵌入式Linux基础教程-读书笔记

    waiting to be fixed. coming soon. +读书笔记: +linux kernel <Linux内核完全剖析基于0.12内核>.pdf 嵌入式Linux基础教程第 ...

  5. Objective-C基础教程读书笔记

    第二章 对C的扩展 1.#import,让编译器引入一次头文件(且仅引入一次). 2.@符号,Objective-C对C的扩展. 第三章 面向对象编程基础知识 1.中缀符(infix notation ...

  6. Objective-C基础教程读书笔记(8)

    第8章 Foundation Kit介绍 Objective-C是一门非常精巧实用的语言,目前我们还没有研究完它提供的全部功能.不过现在,我们先探索另一个方向,快速了解一下Cocoa中的Foundat ...

  7. oc 基础教程 读书笔记

    转载自:http://www.cnblogs.com/smallyin00/archive/2013/03/02/2939606.html p38 @interface 定义类的公共接口,用来提供类的 ...

  8. Python基础教程读书笔记(第5章—第6章:条件、循环和其他语句;抽象)

    第五章:条件.循环和其他语句 1:print 和 import 的更多信息 1)使用逗号输出--打印多个表达式,只要将它们用逗号隔开就行: >>> print('Age:',42) ...

  9. 疯狂Java讲义(读书笔记)(第五章)

    第五章面向对象(下) 5.1 Java 8 增强的包装类 把字符串类型的值转换为基本类型的值有两种方式. 利用包装类提供的parseXxx(String s)静态(除了Character之外的所有包装 ...

最新文章

  1. mysql触发器菜鸟_mysql触发器学习
  2. 懂数学人的都认同:数学的本质[关联]万物(一)
  3. session 重写进入redis测试
  4. 使用tensorflow出现 ImportError: DLL load failed: 找不到指定的程序
  5. GNU/CPIO 学习小结
  6. 2021 程序媛跳槽记:学习计划篇(已收获字节等offer)
  7. 众推架构的进一步讨论
  8. php如何查询mysql数据库字符集_修改及查看mysql数据库的字符集_MySQL
  9. 敏捷落地的会议和工具
  10. LINUX文件处理命令
  11. 常用的字符串对象方法
  12. 你能卖什么,决定了你的收入落在什么档次
  13. 云南公安云计算平台项目获中国优秀云计算开源案例特等奖
  14. linux英英词典项目,五大主流英英词典(ESL)比较使用测评报告
  15. 微信翻译助手小程序 day2 -翻译功能页
  16. php kindeditor,在PHP使用kindeditor
  17. 网传华为员工未加班领夜宵被冻薪降考评,并终身不得领夜宵
  18. Python第二阶段学习 day17
  19. 让你越来越值钱的秘密:目标清单
  20. 数字电路硬件设计系列(二)之DC-DC电源设计

热门文章

  1. 云服务器Linux安装,配置,使用nginx
  2. go tcp客户端自动重连_使用 Go 语言创建 WebSocket 服务
  3. 初次进入oracle数据库,Oracle数据库的初次使用
  4. java redis 商品秒杀_使用redis秒杀出现产品超发现象求解?
  5. springcloud Hystrix Dashboard微服务监控
  6. 信贷产品的架构设计总览
  7. 你会先写PRD,还是先画原型?
  8. 拆解食饮新消费品牌的增长密码
  9. 新商业蓝皮书2021
  10. 2020微博用户发展报告