赞
踩
目录
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函为静态函数。
- //代码1
- #include <stdio.h>
- void test()
- {
- int i = 0;
- i++;
- printf("%d ", i);
- }
- int main()
- {
- int i = 0;
- for(i=0; i<10; i++)
- {
- test();
- }
- return 0;
- }
- //代码2
- #include <stdio.h>
- void test()
- {
- //static修饰局部变量
- static int i = 0;
- i++;
- printf("%d ", i);
- }
- int main()
- {
-
- int i = 0;
- for(i=0; i<10; i++)
- {
- test();
- }
- return 0;
- }
-
- /*对比代码1和代码2的效果理解static修饰局部变量的意义。
- 结论:
- static修饰局部变量改变了变量的生命周期
- 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
- 11.2.2 修饰全局变量
- 代码1正常,代码2在编译的时候会出现连接性错误。
- 结论:
- 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使
- 用。
- */
对比代码1和代码2的效果理解static修饰局部变量的意义。
结论:
static修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
static修饰全局变量
- //代码1
- //add.c
- int g_val = 2018;
- //test.c
- int main()
- {
- printf("%d\n", g_val);
- return 0;
- }
- //代码2
- //add.c
- static int g_val = 2018;
- //test.c
- int main()
- {
- printf("%d\n", g_val);
- return 0
代码1正常,代码2在编译的时候会出现连接性错误。
结论:
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使
用。
static修饰函数
- //代码1
- //add.c
- int Add(int x, int y)
- {
- return c+y;
- }
- //test.c
- int main()
- {
- printf("%d\n", Add(2, 3));
- return 0;
-
- }
- //代码2
- //add.c
- static int Add(int x, int y)
- {
- return c+y;
- }
- //test.c
- int main()
- {
- printf("%d\n", Add(2, 3));
- return 0;
- }
代码1正常,代码2在编译的时候会出现连接性错误.
结论:
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
剩余关键字后续课程中陆续会讲解。
- //define定义标识符常量
- #define MAX 1000
- //define定义宏
- #define ADD(x, y) ((x)+(y))
- #include <stdio.h>
- int main()
- {
- int sum = ADD(2, 3);
- printf("sum = %d\n", sum);
-
- sum = 10*ADD(2, 3);
- printf("sum = %d\n", sum);
-
- return 0;
- }
- #include <stdio.h>
- intmain(){
- intnum=10;
- #//取出num的地址
- //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
- printf("%p\n", &num);//打印地址,%p是以地址的形式打印
- return0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。